gpt4 book ai didi

java - Spring Boot 将事务(和数据库连接)传播到 @Async 方法

转载 作者:行者123 更新时间:2023-12-01 18:01:58 25 4
gpt4 key购买 nike

我们遇到以下问题:我们有一些服务 bean 进行一些处理,并将迭代一组并为每个条目启动一个异步线程,如下所示:

@Service
public class ServiceBean {
@Autowired
private AsyncHandler asyncHandler;

public void doService(Set<?> theSet) {
for (Object obj : theSet) {
Future<?> future = asyncHandler.doHandle(obj);
// ...
}
// wait for all futures to complete
}
}

@Service
public class AsyncHandler {
@Async
public Future<?> doHandle(Object object) {
// dosth
return future;
}
}

现在我们看到每个线程都会持有自己的事务,从而持有数据库连接,这将导致连接池很快变空。

在所有线程之间共享事务的所需方式是什么?

提前致谢!

最佳答案

What is the desired way to share the transaction accross all threads?

不要那样做。这使得人们很难理解正在发生的事情。事务附加到创建它的线程是有原因的。我猜你的计划是启动所有这些异步线程,然后等待它们完成以发送提交信号。

如果不这样做,谁来完成交易?如果一个线程回滚事务,那么仍在使用该事务的其他线程会发生什么?显然,您可以传递Connection,但我希望无论如何都能序列化事物,因为大多数连接实现在不同的地方使用synchronized

关于java - Spring Boot 将事务(和数据库连接)传播到 @Async 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com