我的代码中有连接泄漏到DB。 有趣的是,当我调试时,所有连接都成功关闭(或者当我执行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);
}
}
}
答案 0 :(得分:3)
我认为您的问题与this question有关C3P0有关。我想在Thread.sleep(delay)
之前DataSources.destroy(dataSource)
解决了您的问题。我还猜你知道有些连接完好无损,检查你的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);
}
}
}