ホームページ >データベース >mysql チュートリアル >Java Web アプリケーションでの JDBC MySQL 接続プールの枯渇を防ぐには?

Java Web アプリケーションでの JDBC MySQL 接続プールの枯渇を防ぐには?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 22:07:10829ブラウズ

How to Prevent JDBC MySQL Connection Pool Exhaustion in Java Web Applications?

JDBC MySQL 接続プーリング: 接続の枯渇を回避するためのベスト プラクティス

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) {}
    }
}

接続プール内の接続を閉じています

です接続プーリングを使用している場合でも接続を閉じるために不可欠です。接続プーリングは自動的に終了を処理しません。代わりに、実際に接続を閉じるのではなく、接続をプールに戻すラップされた接続が使用されます。

接続を閉じることに失敗すると、接続はプールに戻されなくなり、接続が枯渇します。適切に終了すると、接続は再利用のためにプールに返されます。

追加リソース

詳細については、次のリソースを参照してください。

  • [Oracle WebLogic の JDBC 接続プーリングサーバー](https://docs.oracle.com/cd/E24329_01/web.1211/e24485/xadatasrc.htm#CJADDHBB)
  • [JDBC 接続を閉じるプール](https://www.onjava.com/pub/a/onjava/2003/05/29/closed-jdbc-connections-in-pool.html)
  • [接続プールを使用した JDBC 接続の管理](https://www.baeldung.com/java-jdbc-connection-pool)

以上がJava Web アプリケーションでの JDBC MySQL 接続プールの枯渇を防ぐには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。