美文网首页
TransactionTemplate事务失效问题

TransactionTemplate事务失效问题

作者: AC编程 | 来源:发表于2023-04-02 16:07 被阅读0次

    一、TransactionTemplate使用代码

    @Slf4j
    public class Test {
        @Resource
        private TransactionTemplate template;
    
        private void func() {
            template.execute((TransactionCallback<Object>) transactionStatus -> {
                 //保存报名信息
                    super.save(activityAttend);
    
                    //存快照信息
                    activitySnapshotService.save(activityAttend.getId(), dynamicDetail);
                    return true;
            });
        }
    }
    

    二、TransactionTemplate事务失效-延时提交了

    用了TransactionTemplate之后,是不能再用@Transactional的,但由于某种原因,TransactionTemplate不小心被@Transactional包裹了,导致出现了一些业务BUG,伪代码如下:

    @Slf4j
    public class Test {
        @Resource
        private TransactionTemplate template;
    
        //不小心被@Transactional
        @Transactional
       private void doxxlJob(){
           func();
       }
    
        private void func() {
            template.execute((TransactionCallback<Object>) transactionStatus -> {
                 //保存报名信息
                    super.save(activityAttend);
    
                    //存快照信息
                    activitySnapshotService.save(activityAttend.getId(), dynamicDetail);
                    return true;
            });
    
           System.out.println("TransactionTemplate还没提交,就执行该代码了");
        }
    }
    

    BUG定位重要提醒:有的时候func(),不只在一个地方被调用,在case1中是没被@Transactional包裹的,可能在case2中就被包裹了。

    三、其他说明

    ransactionTemplate在执行事务时,会根据事务的传播属性和隔离级别等参数来选择合适的事务管理器,并在事务回调执行完毕后自动提交事务。因此,如果TransactionTemplate的事务延时提交,可能是由以下原因导致的:

    事务传播属性设置错误:事务传播属性用于控制事务的传播行为,如何处理在嵌套的方法调用中多个事务之间的关系。如果在调用嵌套方法时设置了错误的事务传播属性,可能会导致事务延时提交或不提交。

    异步调用:如果在事务回调中使用了异步调用,例如使用@Async注解或是使用线程池进行异步处理,可能会导致事务延时提交或不提交。

    事务管理器设置错误:如果在使用TransactionTemplate时,选择了错误的事务管理器,可能会导致事务延时提交或不提交。

    为了避免TransactionTemplate的事务延时提交,我们需要仔细检查事务传播属性、异步调用和事务管理器等方面的设置,确保事务能够正确地执行并保持数据的一致性。同时,我们还可以通过日志记录、调试等方式来定位和解决事务延时提交的问题。若确实是存在延时提交的情况,也可以考虑手动提交事务来解决问题。

    相关文章

      网友评论

          本文标题:TransactionTemplate事务失效问题

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