在一些不使用连接池的较老的Java Web应用程序中,我有一个连接泄漏。
查找泄漏很困难,因为它不会授予我访问v$session的权限
SELECT Count(*) FROM v$session;
因此,我尝试使用System.Out语句进行调试。即使在关闭连接之后
conn.close();
当我将conn打印到系统日志文件时,它会给出连接对象的名称。
try {
Connection conn;
conn.close()
}
catch (SQLException e) { }
finally {
if (conn != null) {
try {
System.out.println("Closing the connection");
conn.close();
}
catch (Exception ex)
{
System.out.println("Exception is " + ex);
}
}
}
// I then check conn and it is not null and I can print the object name.
if (conn != null) {
System.out.println("Connection is still open and is " + conn);
}
但是,如果我还补充
conn = null;
在下面
连接关闭();
语句连接现在似乎已关闭。所以我的问题是conn.close();实际上释放了我的连接,还是必须使其为空才能真正释放我的连接。就像我说的,在没有查询v$session的情况下,很难确定连接是否真的被释放。是否有Java代码片段可以给我打开的连接??
这可能是有教育意义的,因为我计划重构这些应用程序以使用连接池,但我现在正在寻找一个快速的创可贴。