2011-07-05 15 views
8

私たちは、データが日付で区切られたシステムを持っています。たとえば、SqlServerでは、月に1つのデータベースがあります。毎月のパーティションでは、C3P0接続プールDataSourceでラップされたJdbcドライバDatasourceが使用されます。java.sql.DataSourceを閉じるには

時間の経過後、パーティションの日付範囲が古いため、オフラインにする必要があります。その場合、関連する月のデータソースを利用可能なリストから削除するだけです。しかし、理想的には、オフラインにするときに、プールがDBへのすべての接続を解放するようにDataSourceを「クローズ」したいと考えています。

DataSourceには私がコールできるクローズメソッドがありません。このため、データソースをクリーンアップする方法がわかりません。

提案がありますか?

答えて

7

C3P0 プールされた DataSourcesを使用している場合は、DataSources.destroy(DataSource)を使用してDataSourceに関連付けられたスレッドと接続を解放できます。私の場合は

9

DataSourceを閉じることはありません。接続を閉じると、は、でを返します。 DataSource自体は、それ自体決して「オープン」ではありません。

タイムアウトの後にプールが開放された接続を放棄することを期待していますので、心配しないことをお勧めします:)強制的に接続を閉じる必要がある場合は、接続プール自体に接続し、c3p0によって提供される任意の機能を直接使用します。

+0

私は彼、OPが唯一のデータソースを閉じたくないと思いますC3P0接続プール全体を削除したいので、現在廃止されたDBへのプールされた接続はこれ以上管理されません。 –

+0

@David:彼は自分のリストからDataSourceを削除して、それ以上の接続が作成されるのを止めようとしています...しかし、私は彼が既存の接続を望んでいると思っていました。 –

+0

@ジョン - 明確にするために、プールの外側にアクティブな接続がないことが予想されます。それはプール自体のアイドル状態の接続だけです。アイドル状態の接続が最終的に落ちるように設定できるかどうかを確認します –

1

、sudocodeの答えは動作しませんでしたので、私はプールされたデータソースを取得していると私はそれを閉じて:@

ComboPooledDataSource datasource = 
       (ComboPooledDataSource) envContext.lookup("jdbc/oracledb"); 
datasource.close(); 
関連する問題