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

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

发生场景:

请添加图片描述

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

解决方式:

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

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

//该注解作用是在主事务提交后,在执行次异步方法。
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void addWaiXiePayJzd(WaiXieJzdReq req){
        System.out.println("异步任务执行====")
    }
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
异步FIFO_gray code异步FIFO的多种约束方式包括以下几种: 1. 读写时钟约束:异步FIFO_gray code异步FIFO需要读写时钟进行同步操作。读写时钟之间应满足一定的时序关系,以保证数据的正确传输和读写的一致性。通常情况下,写时钟应该在读时钟的上升沿之前完成写入操作,以防止读取到不稳定或无效的数据。 2. 数据宽度约束:异步FIFO_gray code异步FIFO的数据输入和输出宽度应相等,即读写数据的位数应一致。如果数据宽度不匹配,可能会导致数据丢失或错误读取。 3. 读写顺序约束:异步FIFO_gray code异步FIFO的读写操作需要按照一定的顺序进行。通常情况下,写操作应在读操作之前完成,以确保数据的正确读取。同时,读写操作之间需要插入适当的等待时间以保证数据的稳定性。 4. 读写使能约束:异步FIFO_gray code异步FIFO的读写使能信号需要在时钟上升沿进行操作。写使能信号应在写入数据之前启用,读使能信号应在读取数据之前启用。同时,读使能和写使能信号之间需要插入适当的延时以保证数据的正确传输和读写的一致性。 5. 异步FIFO_gray code同步约束:异步FIFO_gray code异步FIFO的读写操作需要通过同步电路进行同步。异步FIFO_gray code异步FIFO通常采用双同步FIFO架构,即读写操作分别采用不同的时钟,但通过同步电路进行数据传输和同步操作。 总之,异步FIFO_gray code异步FIFO在设计和实现时需要考虑时钟约束、数据宽度约束、读写顺序约束、读写使能约束以及异步同步约束等多种约束方式,以确保数据的正确传输和读写的一致性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值