手动改变事务传播行为

        通常在项目中,会设置默认的事务传播行为,有时候我们想在某些方法中改变事务传播行为,在方法上加@Transactional(propgation=xxx)不一定有用,可以用下面的方式手动加上。

    先定义类变量

@Autowired

DataSourceTransactionManagerdataSourceTransactionManager;

在方法中写上

TransactionTemplate transactionTemplate =new TransactionTemplate(dataSourceTransactionManager);

transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

这就改变了事务传播行为了。

项目中有个需求,就是在进行业务处理之前需要更新另外的表(任务表),处理业务与任务表的更新不能在同一事务中,而且项目中用的事务传播行为是REQUIRED,按这个需求应该用REQUIRES_NEW,试了许多方法都没法改变事务传播行为,最后用了了上文的手动更改,不同的是在设置好传播行为后面加上了

transactionTemplate.execute(new TransactionCallbackWithoutResult() {

    //自己的代码

});

这样,我的更改任务表的sql就自成事务,与业务处理不相干扰。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容