ホームページ >データベース >mysql チュートリアル >「MySQLNonTransientConnectionException: 接続が閉じられた後は操作は許可されません」が発生する理由と修正方法を教えてください。

「MySQLNonTransientConnectionException: 接続が閉じられた後は操作は許可されません」が発生する理由と修正方法を教えてください。

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 04:59:021058ブラウズ

Why Am I Getting

データベース タイムアウトと接続プーリングの過負荷

この Hibernate の問題、「com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 操作は許可されません」接続が閉じられた後」は、非アクティブなために永続的な接続が暗黙的に閉じられたときに発生します。

原因:

接続は確立されていますが、長期間非アクティブのままであり、サーバーの「wait_timeout」または「connectionTimeout」などのクライアントのタイムアウト設定。

解決策:

1。サーバーとクライアントのタイムアウトを調整します:

  • サーバー側で、MySQL 構成の「wait_timeout」パラメーターを増やします。
  • クライアント側で、「connectionTimeout」を指定します。接続構成内の「readTimeout」プロパティ。

2.接続プーリングの構成:

  • Hibernate の組み込みプールの代わりに、C3P​​0 などのサードパーティ接続プールを使用します。
  • 「maxPoolSize」、「」などの適切なプール パラメーターを構成します。 minPoolSize、"idleTimeout"、および "maxIdleTime"。

C3P0 を使用したサンプル hibernate.cfg.xml 構成:

<code class="xml"><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.min_size">5</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.idleTestPeriod">3600</property>
<property name="c3p0.maxIdleTime">3600</property></code>

追加ヒント:

  • 接続をブロックまたはタイムアウトしている可能性のあるファイアウォールまたはプロキシ サーバーを確認します。
  • MySQL Connector など、JDBC 接続プーリングをサポートする JDBC ドライバーの使用を検討してください。 J.
  • 接続の使用パターンを監視し、それに応じてプール サイズを調整します。

以上が「MySQLNonTransientConnectionException: 接続が閉じられた後は操作は許可されません」が発生する理由と修正方法を教えてください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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