21 * The transaction propagation type. 22 * 传播行为定义,枚举类型,是spring独有的事务行为设计,默认为PROPAGATION_REQUIRED(支持当前事务,不存在则新建) 23 */ 24 Propagation propagation() default Propagation.REQUIRED; 25 26 /** 27 * The transaction isolation level. 28 * 隔离级别,对应数据库的隔离级...
}//我们addUser的方法事务传播行为是PROPAGATION_REQUIRED,所以走这个分支elseif(definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED ||definition.getPropagationBehavior()== TransactionDefinition.PROPAGATION_REQUIRES_NEW ||definition.getPropagationBehavior()==TransactionDefinition.PROPAGATION_...
//我们addUser的方法事务传播行为是PROPAGATION_REQUIRED,所以走这个分支 else if (definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED || definition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRES_NEW || definition.getPropagationBehavior() == TransactionDefinition....
2.1、Propagation.REQUIRED+Propagation.REQUIRES_NEW package dxz.demo1; @Service public class ServiceAImpl implements ServiceA { @Autowired private ServiceB serviceB; @Autowired private VcSettleMainMapper vcSettleMainMapper; @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false) publ...
整合有缓存、事务的spring boot项目一切正常。 在该项目上整合shiro安全框架,发现部分类的缓存Cache不能正常使用。 然后发现该类的注解基本失效,包括事务Transaction注解。事务不能正常运行。 分析 注解失效的类,都是在shiro框架中(UserRealm)使用过@Autowire注入的类。
在springboot进行事务测试的时候,发现事务没有生效,在方法上添加了@Transactional注解并让方法先执行插入操作,接着再抛出个异常,触发事务回滚,代码如下: 代码语言:javascript 复制 @Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)publicvoidexecuteSaveRollback(TestTable testTable)throwsException...
<tx:advice id="txUserAdvice" transaction-manager="txUserManager"> <tx:attributes> <tx:method name="create*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="delete*" propagation="REQUIRED" ro...
在Spring的@Transaction中,有个重要的属性:Propagation,指的是事务方法之间发生嵌套调用时,事务的传播行为(当前调用的这个方法的事务,和当前的其他事务之间的关系)。 在TransactionDefinition中定义了7种事务的传播行为,这里简单记录一下。 看一下Propagation的源码: ...
事实上,传播行为仅停留在Spring层面,数据库系统中并没有相关概念。 PROPAGATION_REQUIRED 如果存在外层事务,则加入该事务;否则创建一个事务。 PROPAGATION_SUPPORTS 如果存在外层事务,则加入该事务;否则以非事务方式运行。 PROPAGATION_MANDATORY 如果存在外层事务,则加入该事务;否则抛出异常。
PROPAGATION_NESTED 表示如果当前正有一个事务在运行中,则该方法应该运行在一个嵌套的事务中,被嵌套的事务可以独立于封装事务进行提交或者回滚,如果封装事务不存在,行为就像PROPAGATION_REQUIRES_NEW。 在代理处理上,有两个分支,与PROPAGATION_REQUIRES_NEW相似的不贴出来,讲下使用savepoint保存点的方式事务处理: ...