异步任务读取不到已插入的数据

异步任务,一般使用于耗时的附加功能,如果在主方法的事务中向数据库插入数据,此时调用异步任务读取主事务插入的数据,可能会存在查询不到数据的问题。

发生场景:

请添加图片描述

上述场景中,主方法向用户表中插入数据,但是剩余的业务逻辑还未执行结束,此时开启一个异步线程,异步任务中的业务逻辑是读取主方法新增的user,并根据user的邮箱发送消息;此时如果主方法中的事务还未提交,那么异步任务中读取新增的user可能会出现读取不到的情况。

解决方式:

  1. 判断主方法中,业务执行结束并且事务提交过程需要多久,然后在异步方法中让线程休眠对应的时间;

  2. @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)注解,添加对事件的监听

//该注解作用是在主事务提交后,在执行次异步方法。
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void addWaiXiePayJzd(WaiXieJzdReq req){
        System.out.println("异步任务执行====")
    }

版权声明:本文为V_A_L原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。