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

歡迎訪問 生活随笔!

生活随笔

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

数据库

解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题

發布時間:2025/3/15 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 的默認設置下,當一個連接的空閑時間超過8小時后,MySQL 就會斷開該連接,而 c3p0 連接池則以為該被斷開的連接依然有效。在這種情況下,如果客戶端代碼向 c3p0 連接池請求連接的話,連接池就會把已經失效的連接返回給客戶端,客戶端在使用該失效連接的時候即拋出異常。
解決這個問題的辦法有三種:
1. 增加 MySQL 的 wait_timeout 屬性的值。
修改?/etc/mysql/my.cnf?文件,在 [mysqld] 節中設置:

#?Set?a?connection?to?wait?8?hours?in?idle?status.
wait_timeout?=?86400

2. 減少連接池內連接的生存周期,使之小于上一項中所設置的 wait_timeout 的值。
修改 c3p0 的配置文件,設置:

#?How?long?to?keep?unused?connections?around(in?seconds)
#?Note:?MySQL?times?out?idle?connections?after?8?hours(28,800?seconds)
#?so?ensure?this?value?is?below?MySQL?idle?timeout
cpool.maxIdleTime=25200

在 Spring 的配置文件中:

<bean?id="dataSource"
????class="com.mchange.v2.c3p0.ComboPooledDataSource">
????<property?name="maxIdleTime"?value="${cpool.maxIdleTime}"?/>
????<!--?other?properties?-->
</bean>

3. 定期使用連接池內的連接,使得它們不會因為閑置超時而被 MySQL 斷開。
修改 c3p0 的配置文件,設置:

#?Prevent?MySQL?raise?exception?after?a?long?idle?time cpool.preferredTestQuery='SELECT?1' cpool.idleConnectionTestPeriod=18000 cpool.testConnectionOnCheckout=true

修改 Spring 的配置文件:

<bean?id="dataSource" ????class="com.mchange.v2.c3p0.ComboPooledDataSource"> ????<property?name="preferredTestQuery" ????????value="${cpool.preferredTestQuery}"?/> ????<property?name="idleConnectionTestPeriod" ????????value="${cpool.idleConnectionTestPeriod}"?/> ????<property?name="testConnectionOnCheckout" ????????value="${cpool.testConnectionOnCheckout}"?/> ????<!--?other?properties?--> </bean>


附:以下 awk 腳本可以用以將 c3p0.properties 文件中的屬性設置轉換成為 applicationContext.xml 中 數據庫連接池 DataSource 所需的 XML 元素形式。

#!/bin/awk

BEGIN?{
????FS="=";
}
{
????if?(NF?==?2)?{
????????if?((x=index($1,?"."))?>?0)?{
????????????property_name?=?substr($1,?x+1,?length($1));
????????}?else?{
????????????property_name?=?$1;
????????}
????????printf("<property?name="%s"?value="${%s}"/>?",?property_name,?$1);
????}
}

轉載于:https://www.cnblogs.com/lydong/p/5001395.html

總結

以上是生活随笔為你收集整理的解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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