spring中@Transactional注解的传播机制简介说明
下文笔者讲述Transactional注解的传播机制简介说明,如下所示
Transactional注解的传播机制简介
Transactional注解的传播机制指: 当一个方法被其他方法调用 是继承其他方法的事务还是开启新事务,还是不参与事务的相关说明 我们将这种操作称之为"Spring事务传播机制" 注意事项: 两个事务方法之间应避免使用this调用 如果的确为同一个类中调用, 应使用SpringContextUtils.getBean(XxxService.class)获取对象实例 然后再调用其中的方法
Spring事务传播机制的实现思路
Transactional注解后面加上(propagation参数值,即可实现不同的事务传播机制)
参数 | 备注 |
@Transactional(propagation = Propagation.REQUIRED) | 如果当前不存在事务,子方法就自己开启事务。父方法如果有事务,它就跟随父方法的事务被包裹其中。总之 REQUIRED 就是必须运行在事务中 |
@Transactional(propagation = Propagation.SUPPORTS) | 如果当前存在了事务,它就也被包裹运行在这个事务中。如果父方法没有开启事务,它就以无事务运行 |
@Transactional(propagation = Propagation.MANDATORY) | 要求当前必须存在事务,否则这个子方法就抛出异常 IllegalTransactionStateException |
@Transactional(propagation = Propagation.REQUIRES_NEW) | 不管当前有没有事务,都不在那个事务中运行,自己一定会单独开启一个独立的事务运行 |
@Transactional(propagation = Propagation.NOT_SUPPORTED) | 如果当前已经存在了事务,则会挂起这个事务。子方法它坚决不在事务中运行 |
@Transactional(propagation = Propagation.NEVER) | 和 Propagation.MANDATORY 相反,子方法要求当前不能存在事务。否则它就抛出异常 IllegalTransactionStateException |
@Transactional(propagation = Propagation.NESTED) | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与 PROPAGATION_REQUIRED 类似的操作 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。