在 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中文網其他相關文章!