在 Java Web 应用程序中使用连接池时,避免耗尽池至关重要。如果连接未正确关闭,则可能会发生这种情况,从而导致应用程序因缺乏可用连接而崩溃。
了解问题
在提供的 Java 代码中,连接池是使用数据源创建并由 bean 管理的。但是,代码在使用连接后无法关闭连接,导致池中的可用连接很快耗尽。
识别并纠正连接泄漏
问题就出现了由于缺乏正确关闭连接、语句和结果集。要解决此问题,应在 try-with-resources 块中关闭 JDBC 资源:
public void create(Entity entity) throws SQLException { try ( Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_CREATE); ) { statement.setSomeObject(1, entity.getSomeProperty()); // ... statement.executeUpdate(); } }
对于 7 之前的 Java 版本,应使用手动资源关闭的 try-finally 块:
public void create(Entity entity) throws SQLException { Connection connection = null; PreparedStatement statement = null; try { connection = dataSource.getConnection(); statement = connection.prepareStatement(SQL_CREATE); statement.setSomeObject(1, entity.getSomeProperty()); // ... statement.executeUpdate(); } finally { if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} } }
关闭连接池中的连接
至关重要即使使用连接池也关闭连接。连接池不会自动处理关闭;相反,它使用包装的连接,该连接可能会将连接返回到池中,而不是实际关闭它。
无法关闭连接将阻止它们返回到池中并导致连接耗尽。正确关闭可确保连接返回到池中以供重用。
其他资源
有关更多信息,请参阅以下资源:
以上是如何防止Java Web应用程序中的JDBC MySQL连接池耗尽?的详细内容。更多信息请关注PHP中文网其他相关文章!