【Bug】Spring 中调用异步方法时可能会存在查询不到上个事物中提交的数据

当一个流程较长时我们会使用异步的方式将流程变成多个小段。
由于异步时单独开启了一个事物,与方法调用处所属的方法并不在同一个事物中。
这样就会产生一个问题:当前一个方法已经执行完但事物还未提交时异步方法中查询在上一个事物中新增的记录,这时,会查询不到记录。

我们前期的处理方式时,在异步方法中将当前线程进行休眠操作(休眠时间根据经验来),以确保异步方法执行逻辑时前一个事物已提交成功

后期将直接调用异步方法改为了在事件监听中调用

ApplicationEventPublisher 接口有两个方法

void publishEvent(ApplicationEvent event);

void publishEvent(Object object);

我们使用第二个方法
Queue queue = new Queue();
ApplicationEventPublisher.publishEvent(queue);

@TransactionalEventListener(phases=“AFTER_COMMIT”)
public void hanldeEvent(Queue queue) {
// 处理业务逻辑
}

你可能感兴趣的:(【Bug】)