1

私はorg.apache.commons.dbcp.BasicDataSourceデータソースの実装として使用しています。コードは接続を取得し、次のように接続を閉じます。

Connection conn = dataSource.getConnection();

接続作業が終わりましたら閉じます

conn.close();

私の質問は次のとおりです:conn.close()は本当に近いので、接続が のように閉じられるとconn.close()、データソースはどのように動作しますか? データソース接続のクローズは実際にはクローズではなく、リリースだけであると聞きましたが、データソース クラスからリリース API が見つかりません。データソースがデータベース接続の作成、終了、解放をどのように管理しているか知りたいです。

ところで、ちょっとした質問: データソースはどのように接続を更新しますか?つまり、データソースの接続が 1 年間使用されていない場合、データソースはどのようにして接続を利用可能に保つのでしょうか?

4

2 に答える 2

2

DataSource( javax.sql.DataSource) は、データベース接続を取得できるものの抽象的な概念を表します。

したがって、DataSourceそれ自体は接続の管理方法の詳細を定義しておらず、 の実装が異なれば、DataSource接続をさまざまな方法で管理できます。

  • 素朴な実装 (Spring の などDriverManagerDataSource) は、要求するたびに新しい接続を作成する場合があり、この場合、close()実際には接続を閉じます。

  • 接続プール (Apache DBCP や c3p0 など) によってサポートされる実装は、プールから既存の接続を返します。Connectionそのような実装によって返されるオブジェクトはプロキシであり、そのclose()メソッドはオーバーライドされて、プールを閉じるのではなく、プールへの接続を返します。

接続プールが接続を正確に管理する方法を知りたい場合は、接続プールの実装に関するドキュメントを確認してください

于 2012-10-10T12:03:38.680 に答える
0

データソースからの接続に対するclose()呼び出しは、必ずしもデータベース接続を閉じるとは限りません。再利用のために接続をプールに戻すだけです。これが行われる方法は、データベースへの実際の接続がPooledConnection一種のクラスで装飾されclose()、このメソッドPooledConnectionがオーバーライドされて、接続が使用可能としてマークされるだけです。

于 2012-10-10T11:55:51.323 に答える