dbcp資料庫連線超時解決方案
1. 問題
Could not open Hibernate Session for transaction; JDBC begin failed
2. 解決方案
MySQL 的預設設定下,當一個連線的空閒時間超過8小時後,MySQL 就會斷開該連線,而 c3p0 連線池則以為該被斷開的連線依然有效。在這種情況下,如果客戶端程式碼向 c3p0 連線池請求連線的話,連線池就會把已經失效的連線返回給客戶端,客戶端在使用該失效連線的時候即丟擲異常。
2.1方案一
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 的配置檔案,設定<property name="maxIdleTime" value="3600" />
3) 定期使用連線池內的連線,使得它們不會因為閒置超時而被 MySQL 斷開
修改 c3p0 的配置檔案,設定:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="preferredTestQuery" value="'SELECT 1'"/>
<property name="idleConnectionTestPeriod" value="18000" />
<property name="testConnectionOnCheckout" value="true" />
<!-- other properties -->
</bean>
如果其他資料支援重連線可以在URL後加上:
jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
2.2方案二
在spring配置檔案中配置資料來源的時候,新增如下幾項屬性配置:
<!-- 下面三項是確保獲得的連線是有效的 -->
<property name="testOnBorrow" value="true"></property>
<property name="testOnReturn" value="true"></property>
<property name="testWhileIdle" value="true"></property>
<property name="validationQuery" value="SELECT 1"></property>
<property name="timeBetweenEvictionRunsMillis" value="檢查無效連線的時間間隔"></property>
<property name="minEvictableIdleTimeMillis" value="連線閒置的時間"></property>
2.3方案三
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <propertyname="driverClassName"value="com.mysql.jdbc.Driver" /> <propertyname="url"value="jdbc:mysql://192.168.0.1:3306/mysqldb"/> <propertyname="username"value="root"/> <propertyname="password"value="1234.abcd"/> <!-- 設定最大連線數 --> <propertyname="maxActive"><value>500</value></property> <!-- 設定最大空閒時間(毫秒) --> <propertyname="maxIdle"><value>10000</value></property> <!-- 設定最大等待時間(毫秒) --> <propertyname="maxWait"><value>1000</value></property> <!-- 超時自動收回 --> <propertyname="removeAbandoned"><value>true</value></property> <!-- 超時時間(以秒數為單位)設定超時時間有一個要注意的地方, 超時時間=現在的時間-程式中建立Connection的時間,如果 maxActive比較大,比如超過100,那麼removeAbandonedTimeout 可以設定長一點比如180, 也就是三分鐘無響應的連線進行回收, 當然應用的不同設定長度也不同。 --> <propertyname="removeAbandonedTimeout"><value>180</value></property> <!-- 在自動回收超時連線的時候列印連線的超時錯誤 --> <propertyname="logAbandoned"><value>true</value></property> </bean> |
相關推薦
dbcp資料庫連線超時解決方案
1. 問題 Could not open Hibernate Session for transaction; JDBC begin failed 2. 解決方案 MySQL 的預設設定下,當一個連線的空閒時間超過8小時後,MySQL 就會斷開該連線,而 c3p0 連線
Fastdfs客戶端連線超時解決方案
歡迎掃碼加入Java高知群交流 Linux伺服器上安裝好的FastDFS之後,在伺服器上測試上傳是沒問題的: /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html 返回的資訊如下: This is
解決資料庫連線超時的問題
檢視資料庫的連線超時時間show global variables like 'wait_timeout'; 2.在擁有許可權的情況下直接使用sql語句進行設定set global wait_timeout=90;3.在許可權不足的情況下可以通過修改spring-co
關於MySQL資料庫連線超時問題的分析與解決
作業系統 Windows 10 Enterprise,資料庫 MySQL-5.5.16,c3p0-0.9.5.2 關於針對資料庫的連線,之前沒有特別注意過,直到遇到如下問題: Could not open JDBC Connection for
DBCP連線池出現連線異常解決方案;
1.properties檔案獲取出錯,將配置檔案重新刪掉再加入一個同名檔案覆蓋 2.關閉配置檔案 避免被Myeclipse佔用; //工具包 package com.account.dao.util; import java.io.InputStream; import
ajax 請求成功,但是後臺feigin請求超時解決方案
== class 技術分享 pre lee sun handler cati try ========後臺請求數據時間較長,報feigin超時錯誤====== fegin報錯如下: feign.RetryableException: Read timed out exe
dubbo multicast 連線失敗解決方案
一、異常資訊 Exception in thread "main" com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method sayHello in the service com.demo.service.DemoSer
樹莓派3B的WiFi中文亂碼問題無法連線_解決方案:
相信很多樹莓派小白都會遇到這個煩人的問題,我當時查到的解決方案就是百度排行第一的一篇”簡書”裡的文章, 而且最可惡的是:你新增內容之後,sudo reboot 重啟的樹莓派wifi直接搜尋不到任何wifi資訊,這讓人很是頭大。 所以這個坑呢,我替你們踩過大家就不要重蹈覆轍了。 至於踩過並繼續尋找出
Python pip包管理器安裝第三方庫超時解決方案
一、國內映象安裝 使用方法:pip install --映象網站 第三方庫名 二、映象網站 http://pypi.douban.com/simple/ 豆瓣http://mirrors.aliyun.com/pypi/simple/ 阿里 http://pypi.hustuniq
ORA-01017: invalid username/password; logon denied Oracle資料庫報錯解決方案一
ORA-01017: invalid username/password; logon denied 錯誤(程式中的使用者和密碼無法登入,登入被拒)。 Oracle 11g 版本 初次安裝使用報錯: 解決方法1建立新使用者: 開啟sqlplus 以系統身份登入: 指令
防火牆內JVisualVM連線jstatd解決方案
jstatd啟動後會開啟兩個埠,其中一個埠可通過引數“-p”指定,如果不指定預設為1099,另一個是一個隨機埠,不能引數指定: # netstat -lpnt|grep jstatd tcp &
忘記本地MySQL資料庫密碼的解決方案。
忘記本地MySQL資料庫密碼,解決方案,分以下10個步驟: 參考連結:https://blog.csdn.net/weidong_y/article/details/80493743 資料庫版本:5.7.21 1、開啟cmd視窗,進入 MySQL的安裝目錄。 2、停止MySQL的服務。已經停止了。
SQL資料庫連線超時時間已到
問題: 1:System.InvalidOperationException: 超時時間已到。超時時間已到,但是尚未從池中獲取連線。出現這種情況可能是因為所有池連線均在使用,並且達到了最大池大小。 2:在向伺服器傳送請求時發生傳輸級錯誤。 (provider: TCP P
微信小程式http連線訪問解決方案
HTTP + 加密 + 認證 + 完整性保護 = HTTPS,小程式考慮到資訊保安的問題,選用了更為穩定安全的https 來進行資訊傳遞。 HTTPS協議的主要作用可以分為兩種:一種是建立一個資訊保安通道,來保證資料傳輸的安全;另一種就是確認網站的真實性。 這就導致了許多好用的http API無法在小程
Win10 oracle10 PLSQLdeveloper登入顯示沒有登入或者ORA-12170TINS連線超時解決辦法
一:可能不相容。右鍵以管理員身份執行PLSQLdeveloper連線資料庫 二:如果以管理員身份執行後,還出現ORA-12170TINS連線超時 可能是網路的問題,檢查網路。檢查連線伺服器地址 如果在本機可以正常使用,可是到區域網中的其他機器就出現“ORA-12170:T
雲資料庫高可用解決方案技術解析
高可用英文翻譯為”High Availability”,從字面上理解就是要做到服務的full-time的持續可用,但老實說,要做到full-time是不現實的,因為能夠影響系統服務可用性的因素實在是太多了,除了軟體BUG、硬體故障外還包括系統所依賴的一些第三方服務(如運營商提供的頻寬),甚至還包括
sql-front部分資料庫不顯示解決方案
點選“mysql front ”圖示,進入“開啟登陸資訊”對話方塊,點選要登陸的資料庫(如localhost,這是你填的資料庫資訊)“名稱”,然後點選“屬性”按鈕, 在彈出的“xxxx的配置”(如localhost的配置)對話方塊中,點選“註冊”按鈕,在出現的對話方塊中點選“資料庫”欄目後
PAT L1-005. 考試座位號 Java超時解決方案
每個PAT考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常情況下,考生在入場時先得到試機座位號碼,入座進入試機狀態後,系統會顯示該考生的考試座位號碼,考試時考生需要換到考試座位就座。但有些考生遲到了,試機已經結束,他們只能拿著領到的試機座位號碼求助於
資料庫中文亂碼解決方案總結,tomcat+mysql+hibernate
我的開發環境是eclipse+tomcat+mysql+hibernate,資料落地時發現中文都成了?,網上一搜,原因有很多,這邊總結下,大家碰到可以按著一一排查: 一般編碼都會常用UTF-8編碼 1. 資料庫編碼 檢視mysql資料的的編碼,確實是utf-8 如