在Glassfish4和Ubuntu14.04上部署之后,我面临一个严重的问题。在java中,由于某些原因,我不使用hibernate。作为查询的结果,我正在手动获取结果集,将结果集发送到JSP页面并对其进行迭代。
问题是,我已将最后一个块设置如下:
finally {
try {
if (conn != null) {
conn.close();
}
if (ctx != null) {
ctx.close();
}
if (cstatement != null) {
cstatement.closeOnCompletion();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}由于我要通过会话将Resultset发送到JSP页面,所以我将按如下方式关闭JSP页面上的结果:
if(结果集!=null) resultset.close();
现在,问题是,几分钟后,我的应用程序开始出现异常,即使用了最大连接池。
我该怎么做才能避免例外呢?
发布于 2015-08-26 02:36:01
当前最终块的问题是:
如果从其中一个close命令引发任何异常,将不会运行以下命令。因为问题似乎是资源泄漏,所以这可能是原因。
如果您在JDK7+下运行且资源是自动关闭的,请尝试使用
try(Connection conn=DriverManager.getConnection();
Statement stat=conn.createStatement){
}然后,资源将被关闭,安全退出试块。
如果您需要关闭“最后块”中的资源,请尝试为每个close语句包装一个try catch。
若要排序关闭资源,请始终关闭稍后创建的资源。
https://stackoverflow.com/questions/32156035
复制相似问题