[英]Close connection to DB does not close all connections
我的代碼中數據庫連接泄漏。 有趣的是,當我調試時,所有連接都成功關閉(或者當我執行Thread.Sleep(100)時)。 但是如果沒有這種聯系,總會存在一種聯系! 您能說出這里的問題嗎?
ComboPooledDataSource dataSource = null;
try {
dataSource = dataSourceFactory.getDataSource(dbType, dbProps);
dataSource.getConnection();
} finally {
if (dataSource != null)
{
try
{
log.debug("validate() : Closing SQL connection pool");
DataSources.destroy(dataSource);
dataSource = null;
log.debug("validate() : SQL connection pool is closed");
}
catch (Exception e)
{
log.error("validate() : Error closing data source", e);
}
}
}
我認為您的問題與有關C3P0的問題有關。 我猜想DataSources.destroy(dataSource)
解決您的問題之前,一個Thread.sleep(delay)
。 我也猜想您知道檢查MySQL日志時某些連接仍然完好無損。 但是,除了您的情況之外,我建議您手動關閉與數據源分開的連接,這是每次使用該連接后都要執行的操作。 因此,我建議進行以下修改:
ComboPooledDataSource dataSource = null;
Connection connection = null;
try {
dataSource = dataSourceFactory.getDataSource(dbType, dbProps);
// Get a connection from the datasource
connection = dataSource.getConnection();
} finally {
if (connection!=null){
connection.close();
}
if (dataSource != null) {
try {
log.debug("validate() : Closing SQL connection pool");
DataSources.destroy(dataSource);
dataSource = null;
log.debug("validate() : SQL connection pool is closed");
} catch (Exception e) {
log.error("validate() : Error closing data source", e);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.