在spring中事务存在嵌套的状况,在这种状况下事务如何协调,spring在TransactionDefinition中设了七个规则,被称做事务的传播机制spring
1.TransactionDefinition.PROPAGATION_REQUIRED 若是当前存在事务,则加入该事务中,当前不存在事务,新建事务 2.TransactionDefinition.PROPAGATION_REQUIRES_NEW 当前存在挂起当前事务,新建事务,当前不存在事务,新建事务。新建的事务不受外层事务无关。 3.TransactionDefinition.PROPAGATION_SUPPORTS 当前存在事务,则加入事务中,当前不存在事务,则非事务的方式运行。 4.TransactionDefinition.PROPAGATION_NOT_SUPPORTS 以非事务的方式运行。若是当前存在事务则将当前事务挂起。 5.TransactionDefinition.PROPERGATION_NEVER 以非事务的方式运行,若是存在事务则抛出异常。 6.TransactionDefinition.PROPERGATION_MANDATORY 当前存在事务则加入事务,当前不存在事务,抛出异常 7.TransactionDefinition.PROPAGATION_NESTED 存在事务,则做为嵌套事务,不存在事务,则新建事务。
PlatformTransactionManager Spring事务管理接口 定义了三个接口:getconnection、commit、rollback数据库
DataSourceTransactionManager 具体的JDBC事务管理类 实现了PlatformTransactionManager的三个接口,具体关于数据库事务管理交给DataSource通常状况下咱们用ibatis用这个管理类便可。code
HibernateTransactionManager 具体的Hibernate事务管理类orm
TransactionDefinition 事务属性类 定义了事务的隔离级别和传播机制等常量接口
TransactionStatus 事务状态信息 保存了Transaction、TransactionDefinition等信息事务
比较好的总结文章:https://www.jianshu.com/p/3ee9dd1857afget