我有一個使用Hibernate來管理SQL連接的獨立Java應用程序。我使用MySQL數據庫,並確保當main()方法退出時所有會話都關閉。Hibernate/C3P0沒有正確關閉MySQL連接(mysql.err上的異常連接)
我的代碼是這樣的:
public static void main(String[] args) {
logger.info("Starting app");
App instance = new App();
try {
instance.run();
} catch (Exception e) {
logger.error("failed to complete run", e);
} finally {
HibernateUtil.closeCurrentSession();
}
logger.info("Finished run");
}
現在,每當這個主要方法退出,我看到一個登錄我的SQL錯誤日誌說:[Warning] Aborted connection 41533470 to db: 'user' user: 'some_user' host: 'some_ip_address_here' (Got an error reading communication packets)
這是否意味着MySQL的手動殺死它?如果是這樣,我該如何優雅地關閉我的MySQL連接?如果我能夠正確回想我的Hibernate,關閉會話就會把它們放回會話池中......我不知道如何完全告訴Hibernate釋放它與MySQL的連接。
編輯:我正在使用C3P0這一個 - 抱歉忘了提前。我的連接關閉,但這只是我的mysql.err日誌上的[Warning]錯誤。我不喜歡看到這些類型的警告,因爲顯然有錯誤。
[Hibernate連接可能重複,即使使用C3P0 +顯式session.close()也不會關閉(http://stackoverflow.com/questions/9755523/hibernate-connections-are-not-closed-even-with- c3p0-explicit-session-close) – Andreas
這篇文章中沒有任何內容會說他正在使用C3P0。 – peterh
以下解決方案對我有所幫助。 [在此輸入鏈接描述](http://stackoverflow.com/questions/40758569/all-used-connections-in-pool-are-sleepy-new-connections-are-created/40861706#40861706) – Rajas