「com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 接続が閉じられた後は操作は許可されません」エラーの診断
Hibernate 使用時リモート接続では、接続の切断により「接続が閉じられた後は操作は許可されません」エラーが発生する可能性があります。デフォルトでは、MySQL には wait_timeout 設定があり、一定期間非アクティブな状態が続いた後に接続を閉じることができます。これは、アプリケーションの長時間実行中、またはネットワークが不安定な場合に発生する可能性があります。
C3P0 による接続プーリング
この問題に対処するには、次のような接続プーリング ライブラリを使用することをお勧めします。 C3P0。 Hibernate のネイティブ接続プーリングは制限されており、運用環境には適していません。接続プーリングは、アプリケーションによって管理および再利用される接続のプールを確立し、クエリごとに新しい接続を確立するオーバーヘッドを削減します。
Hibernate を使用した C3P0 の構成
ここにあります。 C3P0 を使用した更新された構成ファイル:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xyz</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.show_sql">false</property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property> <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.idle_test_period">100</property> <!-- seconds --> <property name="c3p0.max_size">100</property> <property name="c3p0.max_statements">0</property> <property name="c3p0.min_size">10</property> <property name="c3p0.timeout">3600</property> <!-- seconds -->
この構成では、C3P0 接続プロバイダーは、プール サイズ、タイムアウト、接続テストの適切な設定で有効になります。
その他考えられる原因
接続プーリングで問題が解決しない場合は、次のような他の考えられる原因を調査する価値があります。
以上がHibernate で「com.mysql.jdbc.Exceptions.jdbc4.MySQLNonTransientConnectionException: 接続が閉じられた後は操作は許可されません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。