日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Hibernate用Mysql数据库时链接关闭异常的解决

發布時間:2025/4/5 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate用Mysql数据库时链接关闭异常的解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在一個項目中,客戶要求除操作系統外全部使用免費軟件,因此我使用了Mysql 4.0作為數據庫服務器,其JDBC驅動為3.0.9版本,在給客戶安裝后調試一切正常。可是到了第二天,只要一登錄就提示“No operations allowed after connection closed”異常,顯示在瀏覽器上。在經過一番檢查后我發現,在這種情況下只要重新啟動Tomcat就恢復正常,然而到了第二天問題依舊。

在網上查找一下,原來Mysql在經過8小時不使用后會自動關閉已打開的連接,摘錄原文如下:

5.4.

I have a servlet/application that works fine for a day, and then stops working overnight

MySQL closes connections after 8 hours of inactivity. You either need to use a connection pool that handles stale connections or use the "autoReconnect" parameter (see "Developing Applications with MySQL Connector/J").

Also, you should be catching SQLExceptions in your application and dealing with them, rather than propagating them all the way until your application exits, this is just good programming practice. MySQL Connector/J will set the SQLState (see java.sql.SQLException.getSQLState() in your APIDOCS) to "08S01" when it encounters network-connectivity issues during the processing of a query. Your application code should then attempt to re-connect to MySQL at this point.

在客戶那邊,晚上時間是不會有人使用這個系統的,就造成了系統中原先沒有考慮到的這個情況。

為此我試驗了三種方法:1、在數據庫的url中加入autoReconnect=true;2、在每次調用getSession()方法時判斷session.isClosed()是否為真,若為真則調用session.reconnect();3、在經過兩天,事實證明前兩種方法都不起作用的情況下,我在這個頁面找到了第三種方法,即不使用Hibernate內置的連接池(Hibernate強烈推薦不使用但我以前一直在用),改用C3P0連接池,這個連接池會自動處理數據庫連接被關閉的情況。要使用C3P0很簡單,先從Hibernate里把c3p0-0.8.3.jar復制到項目的lib目錄中,再在hibernate.properties里去掉hibernate.c3p0開頭的那些屬性的注釋(使用缺省值或自己需要的數值),這樣Hibernate就會自動使用C3P0代替內置的連接池了。到目前為止前面的問題沒有再出現過。

以前對Hibernate警告不要使用內置連接池作產品用途沒有太放在心上,這次是一個教訓,所以不論從穩定還是性能的考慮,都應該選擇相對更加成熟的連接池。

update:除了連接池的原因,原先寫的HibernateDAO類也有問題,在有些情況下一個session會被多個請求反復使用,現在已改正。另外,c3p0這個名字不是星球大戰里那個機器人么?

本文轉自博客園八進制的博客,原文鏈接:Hibernate用Mysql數據庫時鏈接關閉異常的解決,如需轉載請自行聯系原博主。

總結

以上是生活随笔為你收集整理的Hibernate用Mysql数据库时链接关闭异常的解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。