首頁  >  文章  >  資料庫  >  如何解決「com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:連線關閉後不允許執行任何操作」?

如何解決「com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:連線關閉後不允許執行任何操作」?

Patricia Arquette
Patricia Arquette原創
2024-10-25 17:10:02753瀏覽

How to Troubleshoot

「com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:連線關閉後不允許執行任何操作」

問題:

將應用程式部署到遠端伺服器時,應用程式運作一天多後出現MySQL連線異常。異常訊息指出連線關閉後不允許進行任何操作。

原因:

此異常可能是由於不活動而導致連線中斷而引起的。 MySQL伺服器和客戶端的預設逾時設定可能太短,導致連線過早關閉。

解決方案:

1.調整伺服器與客戶端逾時

  • 伺服器(MySQL 設定):

      增加MySQL 中的「wait_timeout」值資料庫設定檔(my.cnf 或my.ini)。此設定決定連線在關閉之前可以保持不活動狀態的最長時間。

客戶端(Hibernate/JDBC 連線池):

    將Hibernate 設定檔中的「timeout」屬性設定為較高的值,例如建議的600 秒(10 分鐘)。這可確保 Hibernate 不會過快關閉連線。
  • 2.啟用連接池

使用連接池(例如C33P0或DBCP)來有效管理資料庫連線。連線池會建立並維護一個預先建立的連線池,減少每次開啟和關閉連線的開銷。

  • 設定連線池在使用前自動檢查並驗證連線。這可確保偵測並丟棄任何斷開的連接,從而防止出現異常。
  • 其他措施:
  • 設定「autoReconnect」屬性
  • 中的 JDBC 連線池配置為 true。這允許池在連線失敗時自動重新建立連線。

使用「testConnectionOnCheckout」屬性在使用連線之前測試連線。這可確保偵測到任何過時的連接並將其從池中刪除。

定期監控​​應用程式日誌
<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <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>

    <!-- Enable C3P0 connection pooling -->
    <property name="hibernate.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.max_statements">0</property>
    <property name="c3p0.timeout">600</property>
    <property name="c3p0.idleConnectionTestPeriod">3600</property>
    <property name="c3p0.testConnectionOnCheckout">true</property>
  </session-factory>
</hibernate-configuration>
以儘早檢測任何潛在的連線問題。 更新的 Hibernate 設定:提供的更新的 Hibernate 設定檔使用 C3P0 連線池並包含建議設定:

以上是如何解決「com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:連線關閉後不允許執行任何操作」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn