2011-07-05 20 views
8

我們有一個系統,其中數據按日期分區。因此,例如在SqlServer中,我們每個月的數據都有一個數據庫。每個月分區使用一個包裝在C3P0連接池DataSource中的Jdbc驅動程序數據源。如何關閉java.sql.DataSource

經過一段時間後,分區的日期範圍變得足夠大,我們希望將其脫機。在這種情況下,我們只需從可用列表中刪除相關月份的DataSource。但是,理想情況下,在離線時,我想「關閉」數據源,以便池放棄到數據庫的所有連接。

DataSource沒有密切的方法讓我打電話,所以我不知道如何清理它。

有什麼建議嗎?

回答

9

您不關閉DataSource - 關閉連接返回DataSourceDataSource本身從未「開放」。

我希望游泳池在暫停後放棄打開的連接,所以我建議你不要擔心它:)如果你需要強行關閉連接,你需要保留一個參考連接池本身並直接使用c3p0提供的任何設施。

+0

我覺得OP不僅要關閉的數據源,他想要刪除整個C3P0連接池,因此不再管理到現在過時的數據庫的連接池了。 –

+0

@David:他將從他自己的列表中刪除DataSource,這將阻止任何更多的連接被創建......但我認爲他然後想要任何現有的連接。 –

+0

@Jon - 爲了澄清我希望在池之外沒有活動連接,只需要關閉池中的閒置連接。我會檢查一下,看看我能否配置它,這樣空閒的連接最終會下降 –

1

在我的情況,@ sudocode的答案沒有工作,所以我獲得的集中的數據源和我關閉它:

ComboPooledDataSource datasource = 
       (ComboPooledDataSource) envContext.lookup("jdbc/oracledb"); 
datasource.close();