一、問題
獲取mysql連線,8小時內無請求自動斷開連線。
二、解決
2.1 分析
mysql伺服器預設的"wait_timeout"是28800秒即8小時,意味著如果乙個連線的空閒時間超過8小時,mysql將自動斷開連線,而連線池卻認為該連線還是有效的,當應用申請使用該連線時,就會導致報錯
2.2 修改mysql配置
通過配置檔案修改:my.cnf
wait_timeout=31536000
interactive_timeout=31536000
通過命令修改
2.3 c3p0
方案一:減少連線池內連線的生存週期
方案二:定期使用連線池內的連線
spring配置檔案
2.4 dbcp
說明:testonborrow的意思是從資料庫連線池中取得連線時,對其的有效性進行檢查。
validationquery 是用來檢查的sql語句,「select 1」執行較快,是乙個不錯的檢測語句。
三、擴充套件
3.1 c3p0配置檔案
false
test
false
null
false
root
password
select id from test where id=1
false
true
root
在hibernate(spring管理)中的配置:
oracle.jdbc.driver.oracledriver
jdbc:oracle:thin:@localhost:1521:test
kayroot
### c3p0 connection pool###
#hibernate.c3p0.max_size 2
#hibernate.c3p0.min_size 2
#hibernate.c3p0.timeout 5000
#hibernate.c3p0.max_statements 100
#hibernate.c3p0.idle_test_period 3000
#hibernate.c3p0.acquire_increment 2
#hibernate.c3p0.validate false
在hibernate.cfg.xml檔案裡面加入如下的配置:
true
四、參考
8小時與8節課
辭去程式設計師的工作已經有乙個半月,十一假期過後一直在學校學習。這段時間有兩句話頗有感觸,一句是專英老師說的 1班有這樣的到課率我已經受寵若驚了,本科生有三分之一到課率就不錯了。還有一句是導航老師說的 可能是大家知道找工作的艱辛,所以大家都來了,聽課都很認真,不像本科寶寶們,即使來了也只關心他的王者...
Mysql連線 8小時問題
mysql預設設定當乙個連線的空閒時間超過8h,mysql就會自動斷開該連線,而連線池仍認為該連線有效。此情況下,若客戶端向連線池請求連線的話,連線池就會把已經失效的連線返回給客戶端,此時客戶端使用失效連線時即丟擲異常。解決方法 配置 spring.datasource.validation que...
spring boot mysql 8小時連線超時
使用springboot 執行緒池連線mysql時,mysql資料庫wait timeout 為8個小時,所以程式第二天發現報錯,在url配置了 autoreconnect true 也不行,正確配置以下 驗證連線的有效性 spring.datasource.test while idle true...