【发布时间】:2011-02-22 08:38:28
【问题描述】:
我的代码中存在与数据库的连接泄漏。 有趣的是,当我调试时,所有连接都成功关闭(或者当我执行 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);
}
}
}
【问题讨论】:
-
如何检查连接是否仍然打开?您似乎正在使用连接池,因此,如果您的应用程序将它们全部关闭时您的数据库仍在报告打开的连接,那可能是正确的(因为池可能会保持一些连接打开,以防您的应用程序中需要另一个连接)。
-
谢谢。我检查连接是否仍然在数据库中使用 sql 查询打开。它是否与“打开连接”与“关闭连接”非常接近这一事实有关?
标签: java sql database-connection datasource