在数据库中事务有四种隔离级别,spring为了解决事务的嵌套,提出了事务的传播机制,即在多个事务方法中,相调用的时候的解决方案,
spring对事务的支持统一定义在TransactionDefinition 类中,该类有几个重要的接口
- int getPropagationBehavior():事务的传播行为
- int getIsolationLevel():事务的隔离级别
- int getTimeout():事务的过期时间
boolean isReadOnly():事务的读写特性。
所谓的事务的传播属性就是多个事务方法在相互调用的时候,事务如何在这些方法之间传递,spring支持7中事务的传播行为
REQUIRED : 如果当前没有事务,新建一个事务,如果当前有事务,就加入一个事务中,这个是最常用的,-
-
- Support : 支持当前事务,当前没有事务就以非事务运行
-
MANDATORY :使用当前事务,如果没有事务就抛出异常REQUIRES_NEW:新建事务,如果当前存在事务,也新建一个事务 NOT_SUPPORTED :非事务运行,当前存在事务把当前事务挂起 NEVER : 非事务运行当前存在事务就抛出异常 NESTED : 如果存在事务,就使用自己的事务,如果没有则与REQUIRED 一样
-
spring的事务传播属性默认是REQUIRED ,使用大多情况,假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。
-
-