私たちはいくつかの処理を行ういくつかのサービスBeanを持っており、セットを反復して各エントリの非同期スレッドを開始しますなどは、以下:Springブートは@Asyncメソッドへのトランザクション(およびdb接続)を反映します
@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;
}
}
は、今、私たちは、それぞれのスレッドが独自のトランザクションと接続プールが非常に高速に空に実行するようになります、それによってデータベース接続を保持することを参照してください。
すべてのスレッド間でトランザクションを共有するための望ましい方法は何ですか?
ありがとうございます!
できません。トランザクションと接続はThreadLocalに格納されます。トランザクションを複数のスレッドにまたがることはできません。同時スレッドの量を制限するのが最も簡単な解決策です。 –
"あなたはできない" ...私はあなたができることを賭けることができる、おそらく春をカスタマイズする必要があるだろう。 ThreadLocal内のトランザクションでは、新しいスレッドでトランザクションを取得して設定する可能性があります。 – Benny
M. Dienum correct私は自分の答えを削除しました。 –