事务:逻辑上的一组操做,组成这组操做的各个单元,要么全都成功,要么全都失败。数据库
原子性是指事务包含的全部操做要么所有成功,要么所有失败回滚,所以事务的操做若是成功就必需要彻底应用到数据库,若是操做失败则不能对数据库有任何影响。编程
一致性是指事务必须使数据库从一个一致性状态变换到另外一个一致性状态,也就是说一个事务执行以前和执行以后都必须处于一致性状态。安全
拿转帐来讲,假设用户A和用户B二者的钱加起来一共是5000,那么无论A和B之间如何转帐,转几回帐,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。并发
隔离性是当多个用户并发访问数据库时,好比操做同一张表时,数据库为每个用户开启的事务,不能被其余事务的操做所干扰,多个并发事务之间要相互隔离。orm
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始以前就已经结束,要么在T1结束以后才开始,这样每一个事务都感受不到有其余事务在并发地执行。对象
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。接口
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使是在数据库系统遇到故障的状况下也不会丢失提交事务的操做。事务
例如咱们在使用JDBC操做数据库时,在提交事务方法后,提示用户事务操做完成,当咱们程序执行完成直到看到提示后,就能够认定事务以及正确提交,即便这时候数据库出现了问题,也必需要将咱们的事务彻底执行完成,不然就会形成咱们看到提示事务处理完毕,可是数据库由于故障而没有执行事务的重大错误。ci
设置事务的隔离级别开发
Read uncommitted :未提交读,任何读问题解决不了。
Read committed :已提交读,解决脏读,可是不可重复读和虚读有可能发生。
Repeatable read :重复读,解决脏读和不可重复读,可是虚读有可能发生。
Serializable :解决全部读问题。
PlatformTransactionManager:平台事务管理器
平台事务管理器:接口,是Spring用于管理事务的真正的对象。
DataSourceTransactionManager :底层使用JDBC管理事务
HibernateTransactionManager :底层使用Hibernate管理事务
TransactionDefinition :事务定义信息
TransactionStatus:事务的状态
事务管理的API的关系:
Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程当中,产生各类状态,将这些状态的信息记录到事务状态的对象中。
Spring的传播行为
Spring中提供了七种事务的传播行为:
保证多个操做在同一个事务中
PROPAGATION_REQUIRED :默认值,若是A中有事务,使用A中的事务,若是A没有,建立一个新的事务,将操做包含进来
PROPAGATION_SUPPORTS :支持事务,若是A中有事务,使用A中的事务。若是A没有事务,不使用事务。
PROPAGATION_MANDATORY :若是A中有事务,使用A中的事务。若是A没有事务,抛出异常。
保证多个操做不在同一个事务中
PROPAGATION_REQUIRES_NEW :若是A中有事务,将A的事务挂起(暂停),建立新事务,只包含自身操做。若是A中没有事务,建立一个新事务,包含自身操做。
PROPAGATION_NOT_SUPPORTED :若是A中有事务,将A的事务挂起。不使用事务管理。
PROPAGATION_NEVER :若是A中有事务,报异常。
嵌套式事务
PROPAGATION_NESTED :嵌套事务,若是A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操做,若是没有异常,执行经过,若是有异常,能够选择回滚到最初始位置,也能够回滚到保存点。
本身手动控制事务,就叫作编程式事务控制。
Jdbc代码:
Conn.setAutoCommite(false); // 设置手动控制事务
Hibernate代码:
Session.beginTransaction(); // 开启一个事务
【细粒度的事务控制: 能够对指定的方法、指定的方法的某几行添加事务控制】
(比较灵活,但开发起来比较繁琐: 每次都要开启、提交、回滚.)
Spring提供了对事务的管理, 这个就叫声明式事务管理。
Spring提供了对事务控制的实现。用户若是想用Spring的声明式事务管理,只须要在配置文件中配置便可; 不想使用时直接移除配置。这个实现了对事务控制的最大程度的解耦。
Spring声明式事务管理,核心实现就是基于Aop。
【粗粒度的事务控制: 只能给整个方法应用事务,不能够对方法的某几行应用事务。】
(由于aop拦截的是方法。)
Spring声明式事务管理器类:
Jdbc技术:DataSourceTransactionManager
Hibernate
技术:HibernateTransactionManager