在 Java 8 中释放打开的连接

Posted

技术标签:

【中文标题】在 Java 8 中释放打开的连接【英文标题】:Release open Connection in Java 8 【发布时间】:2019-07-18 08:39:50 【问题描述】:

我有一个基于 JSP/Servlet 的应用程序,数据库团队抱怨打开的数据库连接增加。我怀疑使用后连接没有关闭。

我想按照 Java 8 中的建议通过初始化 try catch 块中的连接字符串来进行一些代码更改

我已经尝试在最后一个块中关闭连接,它工作正常

这是我要实现的代码,这会解决问题吗?有没有其他方法可以在使用后关闭打开的连接而几乎没有代码更改?

   try(Connection con =  DBConnectivity.openConnectionThread(); 
   PreparedStatement ps1 = con.prepareStatement(sql1)) 
   -----
     ------
    

【问题讨论】:

这是您代码中访问数据库的唯一的地方吗?你不在应用程序的其他部分使用 db? Try / Try-with-resources and Connection, Statement and ResultSet closing的可能重复 否 有多个地方初始化了连接。我正在使用连接池 public static final ThreadLocal connectionThread = new ThreadLocal(); @BipinSasi 这不是正确的连接池方式,很容易泄漏连接。 【参考方案1】:

你也应该关闭PreparedStatement

try(Connection con =  DBConnectivity.openConnectionThread();
     PreparedStatement ps1 = con.prepareStatement(sql1)) 
    
   -----
     ------
    

【讨论】:

以上是关于在 Java 8 中释放打开的连接的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络—— 运输层:TCP的连接建立和连接释放

异常处理(下)

异常处理(下)

TCP的连接建立与连接释放

《Java从小白到大牛》之第14章 异常处理(下)

如何查询数据库连接不释放,和java程序一直进行链接,这种问题怎么处理