手动改变事务传播行为

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

    先定义类变量

@Autowired

DataSourceTransactionManagerdataSourceTransactionManager;

在方法中写上

TransactionTemplate transactionTemplate =new TransactionTemplate(dataSourceTransactionManager);

transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

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

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

transactionTemplate.execute(new TransactionCallbackWithoutResult() {

    //自己的代码

});

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

你可能感兴趣的:(手动改变事务传播行为)