[英]Hibernate/C3P0 not closing MySQL connections properly (Aborted connections on mysql.err)
我有一個使用Hibernate來管理SQL連接的獨立Java應用程序。 我使用MySQL數據庫,並確保在main()方法退出時關閉所有會話。
我的代碼是這樣的:
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日志上出現了[警告]錯誤。 我不喜歡看到這些類型的警告,因為顯然存在問題。
我添加了另一個方法,該方法也可以關閉HibernateUtil中的C3P0ConnectionProvider以進行靜態訪問。
SessionFactoryImpl impl = (SessionFactoryImpl) sessionFactory;
C3P0ConnectionProvider provider = (C3P0ConnectionProvider) impl.getConnectionProvider();
provider.close();
在那之后,我再也沒有看到那些討厭的警告。
您可以在代碼中的run()
方法中控制Hibernate會話。
有關示例,請參見Session
javadoc。 如果您使用Google,Hibernate會話控件可能還有許多其他示例。
如果對HibernateUtil.closeCurrentSession()
的調用曾經做過任何事情,則您的run()
方法在run()
完之后無法正確清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.