Spring事务@Transactional中使用异步线程bug

   @Transactional
    @Override

    public int genRecord(AppRecord appRecord) throws BizException{

 

         //异步线程初始化RecordStatus对象

         RecordStatusWorker recordStatusWorker = new RecordStatusWorker(appRecord);
            asyncRecordStatusAndSwipeCardExecutor.submit(recordStatusWorker);

  }


异步线程,最终调用的是这个方法

public void initRecordStatusWhenSyncRecord(Integer id) {
AppointmentRecord appointmentRecord = appointmentRecordMapper.get(id);



}


在实际执行过程中,appointmentRecord  有时为null,有时不为null。

根本原因是,事务还没有提交完成,可能就调用了initRecordStatusWhenSyncRecord方法。

这个时候,数据库中不一定有record对象。


方法1:

initRecordStatusWhenSyncRecord 查找不到Reord的时候,等几秒,再查询1次,从而完成初始化。

方法2:

调用initRecordStatusWhenSyncRecord 的时候,传递 AppRecord对象,而不是id。


©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值