それがどのように機能するかを修正できますか?トランザクション アノテーションでマークされたメソッド。インターセプトされたときに DB トランザクションが開かれ、Spring トランザクションの両方でコミットされます。また、そのようなメソッドが完了していない間、DB 内の関連するすべてのリソースがロックされたままになります。たとえば、トランザクション メソッドでは、DB からいくつかのエンティティを取得し、それらの一部を複数回更新または削除しました。これはすべてSpringトランザクションで発生しており、DBトランザクションは必要なロックを伴うトランザクションメソッドの最後でのみ発生します??? メソッドがデッドロックなどでハングした場合、ロックされたリソースは DB 内の他のリソースに対してロックされたままになりますか? 私が見るように、はい..
DB (postgresql) state:
30179 | username | 00:23:05.688157 | IDLE in transaction
6739 | username | 00:23:13.02717 | IDLE in transaction
6748 | username | 00:23:15.266922 | IDLE in transaction
25595 | username | 00:23:22.382349 | IDLE in transaction
25595 | username | 00:23:22.382349 | IDLE in transaction
それらのすべてがロックを保持していました (23、21、20、5、6)。これはどのように起こりますか?私は長い手術をしていません。デッドロックのみ :D しかし、これは起こるべきではありません!! そのため、いくつかのトランザクション メソッドがハングしたが、リソースがロックされたままになっていることがわかりました。これにより、他のトランザクションまたは次のトランザクションが停止し、ロックされたリソースを待機し、すべてのシステムが動作を停止しました...