在 spring @Transactional 中使用 CompletableFuture

using CompletableFuture inside spring @Transactional

我正在使用标记为交易的 api。它在其中使用可完成的未来来保持异步。所以 api 看起来像:

@Transactional
public Response executeJob (Request request){

   //check if job is already in progress using db read

   //if not -> create new job put it in progress and start

   //if previously failed -> update job status to in progress and restart
  
   //update job status in DB

   //submit job to completable future -> preforms lots of db reads and writes

   //return Response details

}

问题: 如果大量用户同时触发请求,我们将获得重复记录。

我尝试在互联网上搜索,但无法理解交易和可完成的未来将如何在这里工作。我的意思是一旦返回响应或一旦可完成的未来完成,交易就会结束。

主要观察: 我自己使用虚拟 api 尝试了几个案例。在可完成的未来的情况下,总是为新线程启动一个新事务。不管它是否被事务注解,如果它被一个事务方法调用,它将为这个线程创建一个新的事务。 如果我们使用这个可完成的未来返回的结果,也可能是最初开始的事务已经完成,现在如果我们试图持久化一些需要在事务中的东西,它可能会因为没有活动事务而失败。如果这似乎在任何地方都不正确或者是否需要更清楚的说明,请告诉我