为什么我调用异步方法CompeletableFUture.supplyASync的时候报transaction needs rollback

img


换成CompeletableFUture.runAsync的时候就没有这个错,一年经验求回复

引用 皆我百晓生 小程序回复内容作答:
出现这个错误可能是因为你在异步方法的执行过程中进行了数据库事务操作,并且事务没有正确地回滚。CompletableFuture.supplyAsync()方法是用来执行有返回值的异步操作的,而CompletableFuture.runAsync()方法是用来执行没有返回值的异步操作的。在执行异步操作时,如果需要进行数据库事务操作,你需要确保事务的正常回滚。

可能的原因包括:

  1. 异步方法执行过程中发生了异常,导致事务没有正确回滚。你可以在异步方法内部加入异常处理机制,确保异常时事务能够回滚。
  2. 异步方法的执行线程和数据库事务的线程不一致,导致事务无法正确回滚。你可以尝试在异步方法中指定使用事务的线程池,以确保事务在正确的线程中执行。

另外,无论使用CompletableFuture.supplyAsync()还是CompletableFuture.runAsync()方法,都需要确保在异步方法执行完成后,对返回值进行处理。可以通过调用CompletableFuture的get()方法来获取异步方法的返回值,或者使用相关的回调方法来处理返回结果。