自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate用MySQL數(shù)據(jù)庫(kù)時(shí)鏈接關(guān)閉異常的表現(xiàn)

數(shù)據(jù)庫(kù) MySQL
以下的相關(guān)內(nèi)容就是對(duì)Hibernate用MySQL數(shù)據(jù)庫(kù)時(shí)鏈接關(guān)閉異常的實(shí)際解決方案 的描述,望會(huì)給你帶來(lái)一些幫助在此方面。

我們今天主要描述Hibernate用MySQL數(shù)據(jù)庫(kù)時(shí)鏈接關(guān)閉異常的實(shí)際解決方案,愿在你學(xué)習(xí)Hibernate用MySQL數(shù)據(jù)庫(kù)時(shí)鏈接關(guān)閉異常的實(shí)際解決方案中以起到拋磚引玉的作用,以下就是文章的詳細(xì)內(nèi)容介紹,望大家借鑒。

在一個(gè)項(xiàng)目中,客戶(hù)要求除操作系統(tǒng)外全部使用免費(fèi)軟件,因此我使用了MySQL 4.0作為MySQL數(shù)據(jù)庫(kù)服務(wù)器,其JDBC驅(qū)動(dòng)為3.0.9版本,在給客戶(hù)安裝后調(diào)試一切正常??墒堑搅说诙?,只要一登錄就提示“No operations allowed after connection closed”異常,顯示在瀏覽器上。在經(jīng)過(guò)一番檢查后我發(fā)現(xiàn),在這種情況下只要重新啟動(dòng)Tomcat就恢復(fù)正常,然而到了第二天問(wèn)題依舊。

在網(wǎng)上查找一下,原來(lái)MySQL在經(jīng)過(guò)8小時(shí)不使用后會(huì)自動(dòng)關(guān)閉已打開(kāi)的連接,摘錄原文如下:

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.
 

在客戶(hù)那邊,晚上時(shí)間是不會(huì)有人使用這個(gè)系統(tǒng)的,就造成了系統(tǒng)中原先沒(méi)有考慮到的這個(gè)情況。

為此我試驗(yàn)了三種方法:

1、在MySQL數(shù)據(jù)庫(kù)的url中加入autoReconnect=true

2、在每次調(diào)用getSession()方法時(shí)判斷session.isClosed()是否為真,若為真則調(diào)用session.reconnect();

3、在經(jīng)過(guò)兩天,事實(shí)證明前兩種方法都不起作用的情況下,我在這個(gè)頁(yè)面找到了第三種方法,即不使用Hibernate內(nèi)置的連接池(Hibernate強(qiáng)烈推薦不使用但我以前一直在用),改用C3P0連接池,這個(gè)連接池會(huì)自動(dòng)處理MySQL數(shù)據(jù)庫(kù)連接被關(guān)閉的情況。要使用C3P0很簡(jiǎn)單,先從Hibernate里把c3p0-0.8.3.jar復(fù)制到項(xiàng)目的lib目錄中,再在hibernate.properties里去掉hibernate.c3p0開(kāi)頭的那些屬性的注釋?zhuān)ㄊ褂萌笔≈祷蜃约盒枰臄?shù)值),這樣Hibernate就會(huì)自動(dòng)使用C3P0代替內(nèi)置的連接池了。到目前為止前面的問(wèn)題沒(méi)有再出現(xiàn)過(guò)。

以前對(duì)Hibernate警告不要使用內(nèi)置連接池作產(chǎn)品用途沒(méi)有太放在心上,這次是一個(gè)教訓(xùn),所以不論從穩(wěn)定還是性能的考慮,都應(yīng)該選擇相對(duì)更加成熟的連接池。

update:除了連接池的原因,原先寫(xiě)的HibernateDAO類(lèi)也有問(wèn)題,在有些情況下一個(gè)session會(huì)被多個(gè)請(qǐng)求反復(fù)使用,現(xiàn)在已改正。另外,c3p0這個(gè)名字不是星球大戰(zhàn)里那個(gè)機(jī)器人么?

【編輯推薦】

  1. 如何實(shí)現(xiàn)MySQL鎖的優(yōu)化
  2. MySQL heap使用大匯總
  3. 如何用PHP來(lái)實(shí)現(xiàn)MySQL備份?
  4. MySQL轉(zhuǎn)義字符的實(shí)際應(yīng)用
  5. MySQL常用技巧都包括哪些?
責(zé)任編輯:佚名 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-04-07 09:40:57

DataReader鏈接關(guān)閉

2010-05-11 18:23:31

MySQL數(shù)據(jù)庫(kù)分區(qū)

2010-06-13 10:46:52

MySQL 數(shù)據(jù)庫(kù)

2011-04-07 15:47:28

MySQL數(shù)據(jù)庫(kù)

2009-09-28 13:29:41

加載過(guò)程Hibernate訪問(wèn)

2009-06-02 14:36:28

HibernateMySQLEclipse

2011-07-12 16:41:14

mysql處理異常

2010-06-17 13:34:47

SQL Server數(shù)

2010-09-29 08:52:34

MySQL

2009-09-25 13:18:15

Hibernate數(shù)據(jù)

2009-09-24 14:12:22

Hibernate數(shù)據(jù)

2010-04-14 17:29:33

Oracle數(shù)據(jù)庫(kù)

2019-07-05 11:20:31

PythonMySQL數(shù)據(jù)庫(kù)

2019-11-23 17:10:58

MySQL數(shù)據(jù)庫(kù)default

2010-06-01 10:58:57

MySQL數(shù)據(jù)庫(kù)

2009-06-24 07:58:52

Hibernate多數(shù)

2011-05-26 14:43:49

ORACLE數(shù)據(jù)庫(kù)異常處理

2010-05-20 14:52:42

MySQL數(shù)據(jù)庫(kù)

2011-08-05 14:02:17

MySQL數(shù)據(jù)庫(kù)異常處理

2015-06-08 13:48:15

數(shù)據(jù)庫(kù)數(shù)據(jù)完整性約束表現(xiàn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)