13

JBoss 7 にデプロイされた Java EE アプリケーションで PostgreSQL 9.1 JDBC4 ドライバー (postgresql-9.1-902.jdbc4.jar) を使用しています。

複数のスレッドが getConnection() メソッドを同時に呼び出すことができるように、 javax.sql.DataSourceはスレッドセーフであると想定できますか?

4

3 に答える 3

10

通常、DataSourceJava EE コンテナーから取得する実装は、接続プールによってサポートされるスレッド セーフなオブジェクトであり、基になる JDBC 接続のスレッド セーフ (またはその他) は実際には関係ありません。データベースと対話する必要がある場合の通常のパターンはgetConnection()、データ ソースを呼び出して接続オブジェクトを取得し、必要なデータベース呼び出しをclose()行ってから接続することです。内部的には、これは実際には基になる接続を閉じませんが、将来の使用のために接続プールに戻すだけです。個々の接続は、一度に 1 つのスレッドによってのみ使用されます。

これは、Spring などで使用されるイディオムJdbcTemplateです。

于 2013-02-14T11:06:40.833 に答える
1

「接続プーリングの実装」の場合は、スレッド セーフにする必要があります。

于 2014-05-04T06:09:02.977 に答える