美文网首页
手动改变事务传播行为

手动改变事务传播行为

作者: Vic_is_new_Here | 来源:发表于2021-07-02 14:01 被阅读0次

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

        先定义类变量

    @Autowired

    DataSourceTransactionManagerdataSourceTransactionManager;

    在方法中写上

    TransactionTemplate transactionTemplate =new TransactionTemplate(dataSourceTransactionManager);

    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

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

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

    transactionTemplate.execute(new TransactionCallbackWithoutResult() {

        //自己的代码

    });

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

    相关文章

      网友评论

          本文标题:手动改变事务传播行为

          本文链接:https://www.haomeiwen.com/subject/rbmeultx.html