11

次のスレッドを見つけました: JdbcTemplate と TransactionManager はどのように連携しますか?

その最初の文:

私が理解している限り、DataSourceTransactionManager は、指定された DataSource から現在のスレッドに JDBC 接続をバインドし、DataSource ごとに 1 つのスレッドにバインドされた接続を許可します。接続のプールの場合は、使用可能な接続の 1 つが使用されます。

・・・まさに知りたいところです。

トランザクション マネージャーを使用する場合、各スレッドが独自の単一の接続を持つことになりますか? また、その接続はどのくらい存続しますか? 同じスレッドが単一のリクエスト全体で同じ接続を使用していますか、それとも何か他のことが起こっていますか? トランザクションマネージャーがある場合とない場合 (実際にトランザクションがあるかどうかに関係なく) で、Spring が下で何をしているのかを正確に理解しようとしています。

4

1 に答える 1

15

トランザクション マネージャーを使用する場合、各スレッドが独自の単一の接続を持つことになりますか? また、その接続はどのくらい存続しますか?

通常、接続は接続プールから取得されます。接続は、トランザクション マネージャーがトランザクションを開始するときにプールから借用され、トランザクションが終了するとプールに返されます。その間、接続はスレッドにバインドされます。

同じスレッドは、単一のリクエスト全体で同じ接続を使用しますか?

トランザクションの間、同じ接続を使用します。リクエスト自体は無関係です。

実際に取引があるかどうかに関係なく

明示的に行うかどうかにかかわらず、常にトランザクションがあります。1 つを明示的に構成しない場合、JDBC ドライバーとデータベースは、1 つの操作を実行するのにかかる限り、1 つを開始して終了します。Spring のトランザクション管理 (または他のフレームワークのトランザクション管理) を使用すると、そのトランザクションの有効期間を複数の操作にわたって延長できます。これを行うには、トランザクションの間、接続を排他的に使用する必要があります。

于 2012-02-14T08:25:16.530 に答える