Spring的事务管理
来源:互联网 发布:微博 知乎 编辑:程序博客网 时间:2024/06/10 22:30
Spring的事务管理功能都是基于底层数据库本身的处理机制工作的。
何为数据库事务?
数据库事务满足:原子性、一致性、隔离性、持久性。一个数据库可以拥有多个访问客户端,这些客户端都可以并发的方式访问数据库。数据库中相同的数>据同时被多个事务访问。会导致各种并发问题:脏读、不可重复度、幻想读、第一类丢失更新、第二类丢失更新。
数据库通过锁的机制来处理并发访问的问题:行共享锁定、行独占锁定、表共享锁定、表共享行独占、表独占。
尽管数据库为用户提供了锁的机制,但是直接使用锁管理是十分麻烦的,因此数据库为用户提供了自动锁机制。只要用户指定会话的事务隔离级别:READ UNCOMMIT、READ COMMITED、REPEATABLE READ、SERIALIZABLE
JDBC对事务的支持:事务最终只能由=有两个操作:提交和回滚操作。
ThreadLocal基础知识:
TreadLocal是为了解决多线程程序的并发问题:当工作于多线程中的对象使用TreadLocal维护变量时,TreadLocal为每个使用该变量的线程分配一个独立的>副本,而不影响其他线程对应的副本。是一种以空间换时间的方式。
TraedLocal是如何做到为每个吸纳过程维护变量的副本的?
在TreadLocal类中有一个Map,用于存储每一个线程的副本,Map中的键为线程对象,而值为线程的变量副本。
Spring为事务管理提供了一致的编程模板,在高层次建立了统一的事务抽象。spring事务管理的亮点在于声明式事务管理。spring允许通过声明的方式,在IOC配置中指定事务的边界和事务的属性,Spring自动在事务的边界上应用事务的属性。
事务管理关键抽象:
在spring事务管理SPI高层抽象主要包括3个接口:PlatformTransactionManager、TransactionDefinition和TransactionStatus。其中TransactionManager定义了Spring兼容的事务属性,这些属性对事务管理控制的若干方面进行配置:事务隔离、事务传播、事务超时、制度状态。TransactionStatus,代表uogeshiwu的具体运行状态
Spring的实现类:
Spring JDBC 和iBatis:
如果使用Spring JDBC或者IBatis,他们都是基于数据源的Connection访问数据库,所以可以使用DataSourceTransactionManager。
JPA
Hibernate
JTA
事务同步管理器:
TransactionSynchronizationManager将Dao、Service类中影响线程安全的所有状态统一抽取到该类中,并用TreadLocal进行替换,从此Dao和Service摘掉了
非线程安全的帽子。
使用XML配置声明式事务:
一用就更容易理解。。。
何为数据库事务?
数据库事务满足:原子性、一致性、隔离性、持久性。一个数据库可以拥有多个访问客户端,这些客户端都可以并发的方式访问数据库。数据库中相同的数>据同时被多个事务访问。会导致各种并发问题:脏读、不可重复度、幻想读、第一类丢失更新、第二类丢失更新。
数据库通过锁的机制来处理并发访问的问题:行共享锁定、行独占锁定、表共享锁定、表共享行独占、表独占。
尽管数据库为用户提供了锁的机制,但是直接使用锁管理是十分麻烦的,因此数据库为用户提供了自动锁机制。只要用户指定会话的事务隔离级别:READ UNCOMMIT、READ COMMITED、REPEATABLE READ、SERIALIZABLE
JDBC对事务的支持:事务最终只能由=有两个操作:提交和回滚操作。
ThreadLocal基础知识:
TreadLocal是为了解决多线程程序的并发问题:当工作于多线程中的对象使用TreadLocal维护变量时,TreadLocal为每个使用该变量的线程分配一个独立的>副本,而不影响其他线程对应的副本。是一种以空间换时间的方式。
TraedLocal是如何做到为每个吸纳过程维护变量的副本的?
在TreadLocal类中有一个Map,用于存储每一个线程的副本,Map中的键为线程对象,而值为线程的变量副本。
public class SimpleTreadLocal{ private Map valueMap=Collections.synchroniedMap(new HashMap()); public void set(Object newvalue){ valueMap.put(currentTread(),newValue); } public Object get(){ Tread currentTread=Tread.currentTread(); Object o=valueMap.get(currentTread); if(o==null && !valueMap.containsKey(currentTread)){ o=initialValue(); valueMap.put(currentTread,o); } return o; } public void remove(){ valueMap.remove(Tread.currentTread()); } public Object initialValue(){ return null; } }Spring对事务管理的支持
Spring为事务管理提供了一致的编程模板,在高层次建立了统一的事务抽象。spring事务管理的亮点在于声明式事务管理。spring允许通过声明的方式,在IOC配置中指定事务的边界和事务的属性,Spring自动在事务的边界上应用事务的属性。
事务管理关键抽象:
在spring事务管理SPI高层抽象主要包括3个接口:PlatformTransactionManager、TransactionDefinition和TransactionStatus。其中TransactionManager定义了Spring兼容的事务属性,这些属性对事务管理控制的若干方面进行配置:事务隔离、事务传播、事务超时、制度状态。TransactionStatus,代表uogeshiwu的具体运行状态
Spring的实现类:
Spring JDBC 和iBatis:
如果使用Spring JDBC或者IBatis,他们都是基于数据源的Connection访问数据库,所以可以使用DataSourceTransactionManager。
JPA
Hibernate
JTA
事务同步管理器:
TransactionSynchronizationManager将Dao、Service类中影响线程安全的所有状态统一抽取到该类中,并用TreadLocal进行替换,从此Dao和Service摘掉了
非线程安全的帽子。
使用XML配置声明式事务:
一用就更容易理解。。。
0 0
- Spring , Spring的事务管理
- Spring事务管理一:Spring事务管理的优点
- spring提供的事务管理
- spring 的事务管理
- spring的事务管理方式!
- spring框架的事务管理
- spring的事务管理问题
- Spring框架的事务管理
- Spring 事务管理的配置
- 关于spring 的事务管理
- Spring的事务管理
- spring的事务管理
- Spring事务管理的改进
- Spring的事务管理
- 配置spring的事务管理
- Spring 的事务管理
- spring事务管理的种类
- Spring的事务管理
- IBATIS动态标签
- wifi攻击pineapple之SSL:轻松拿到JD密码
- kettle中给ktr作业设置日志
- jni jstring 、char* 类型的转换
- 用simpleXML来解析XML
- Spring的事务管理
- spring事务管理几种方式
- Mac终端快捷键 & Mac OSX 快捷键
- sql 数据库远程配置(不/安装ssms)
- 什么是WiFiPineApple之深藏不漏
- [BZOJ3238] [AHOI2013] 差异 - 后缀自动机
- Unity2D多分辨率屏幕适配方案
- datatables 选项之DOM:定义表格控件在页面的显示顺序以及language语言选项
- 对于集合的遍历操作,可以使用 itrator foreach for 循环,下面比较一下各自的优缺点