2010-04-07 179 views
1

我在apache tomcat服務器上運行的程序,應該是永久的,但每天早上(客戶端部分不能在晚上訪問)我收到錯誤消息(在Apache Tomcat控制檯),MySQL服務器是關閉。那麼有什麼方法可以防止這種情況? 在此先感謝!MySQL連接超時

+0

你在使用連接到您的數據庫?您是否正在使用連接池將數據庫連接全部打開(並且不夠聰明以便在完成時關閉它們,或者至少重新打開連接消失)? – Seth 2010-04-07 17:51:25

+0

OPS,我錯過了我正在使用Hibernate API訪問數據庫 – NikolayGS 2010-04-07 18:20:13

+0

您能否粘貼確切的錯誤消息?在這之後你如何修復你的系統?你重新啓動你的tomcat,一切都很好嗎? – 2010-04-07 19:04:30

回答

1

我想你直接在你的web應用代碼中打開連接。 您可以嘗試引入一個connection pool使用超時連接應重新建立。

如果這不起作用,請詢問網絡管理員他是否擁有有狀態的過濾器來檢測超時(當客戶端空閒時)並關閉連接。

如果您使用的是數據庫池,如c3p0或dbcp,請查看其文檔,應該設置配置空閒超時或定期檢查連接(這將保持連接打開,並且不會超時在服務器端)

+0

在這種情況下,我是管理員,但我不是那麼先進,熟悉連接池,但我會閱讀你的文章,並嘗試搜索解決方案 – NikolayGS 2010-04-08 07:48:01

8

在一段時間後,mysql服務器超時連接,默認情況下它是28800秒,這很可能是您正在訪問的超時。

通過將autoreconnect=true參數添加到jdbc url中,您可以指示mysql驅動程序在發生連接丟失時重新連接,例如, jdbc:mysql://localhost/mydb?autoreconnect=true

+0

我試過了(我必須把網址放在hibernata cfg文件中嗎?)並且今天早上連接丟失了,但正如我提到的,當我重新啓動tomcat時,一切正常(先前必須先重新啓動第一個mysqld.exe) – NikolayGS 2010-04-08 07:43:58

+2

值得注意的是[MySQL Connector/J文檔](http ://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html#idm140446220006144)*「,因爲它在應用程序不具有會話狀態和數據一致性時會產生副作用正確處理SQLExceptions,並且只能在您無法配置應用程序以正確處理由於死鎖和陳舊連接導致的SQLExceptions時使用。*。 – 2015-04-22 13:44:30

10

是的,我有同樣的問題。嘗試將驗證查詢添加到您的數據源。

下面是我定義我的:

<Resource auth="Container" 
      type="javax.sql.DataSource" 
      name="jdbc/gporder" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost/mydb" 
      maxActive="10" 
      maxIdle="5" 
      validationQuery="SELECT 1" 
      testOnBorrow="true" 
      testWhileIdle="true" 
      timeBetweenEvictionRunsMillis="10000" 
      minEvictableIdleTimeMillis="60000" 
      username="..." password="..."/>