通常在项目中,会设置默认的事务传播行为,有时候我们想在某些方法中改变事务传播行为,在方法上加@Transactional(propgation=xxx)不一定有用,可以用下面的方式手动加上。
先定义类变量
@Autowired
DataSourceTransactionManagerdataSourceTransactionManager;
在方法中写上
TransactionTemplate transactionTemplate =new TransactionTemplate(dataSourceTransactionManager);
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
这就改变了事务传播行为了。
项目中有个需求,就是在进行业务处理之前需要更新另外的表(任务表),处理业务与任务表的更新不能在同一事务中,而且项目中用的事务传播行为是REQUIRED,按这个需求应该用REQUIRES_NEW,试了许多方法都没法改变事务传播行为,最后用了了上文的手动更改,不同的是在设置好传播行为后面加上了
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
//自己的代码
});
这样,我的更改任务表的sql就自成事务,与业务处理不相干扰。
网友评论