1. 程式人生 > >dbcp資料庫連線超時解決方案

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&amp;characterEncoding=utf-8&amp;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 以系統身份登入: 指令

SpringCloud:Feign呼叫超時解決方案

                                          &

防火牆內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 如