Java Web アプリケーションで接続プーリングを使用する場合、プールの枯渇を避けることが重要です。これは、接続が適切に閉じられていない場合に発生する可能性があり、使用可能な接続の不足によりアプリケーションがクラッシュします。
問題の理解
提供された Java コードでは、接続プールはデータ ソースを使用して作成され、Bean によって管理されます。ただし、コードは接続の使用後に閉じることに失敗し、プールで使用可能な接続がすぐに不足してしまいます。
接続リークの特定と修正
問題が発生します。接続、ステートメント、結果セットが適切に閉じられていないことが原因です。これを解決するには、JDBC リソースを try-with-resources ブロック内で閉じる必要があります:
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(); } }
Java バージョン 7 より前の場合は、リソースを手動で閉じる 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 中国語 Web サイトの他の関連記事を参照してください。