記錄阿里巴巴連線池DruidDataSource的一個bug
問題:應用程式連線資料庫,老是報一個錯誤: caused by wait millis 5000 ,active 0,maxactive 20
連線不上資料庫超時。但是我用一個單獨的jdbc在問題機器上測試連線資料庫,發現卻是可以連線的。
二、解決問題:
後來經過曲折的探索過程,反覆測試,發現 查詢問題,發現是連線池引數<property name="validationQuery" value="SELECT 1" /> 配置錯誤。雖然配置錯誤,但是連線池版本是1.0.10,太舊(2014年的),沒有把真正的報錯提示出來“ora-00923 未找到要求的關鍵字from”,而是報這個錯誤:“ caused by wait millis 5000 ,active 0,maxactive 20”。也就是說,本來配置出錯,但是因為阿里巴巴連線池DruidDataSource的bug,把這個錯誤隱藏起來,一直沒有報錯。或者說,一直沒有把真正的錯誤報出來。本來是一個很簡單的錯誤。換成1.1.6,錯誤出現了:
一看這個錯誤,就很明白了:因為“”ora-00923 未找到要求的關鍵字from”導致“caused by wait millis 5000 ,active 0,maxactive 20” 連線超時問題。
三。總結:最後建議DruidDataSource配置成如下:
升級到最新穩定版本
<property name="minIdle" value="1" />
<property name="validationQuery" value="SELECT 1 FROM DUAL" />
<property name="testOnBorrow" value="true" />
<property name="poolPreparedStatements" value="true" />
<property name="initialSize" value=1 />
四。另外有幾個引數的意思是:
validationQuery SQL查詢,用來驗證從連線池取出的連線,在將連線返回給呼叫者之前.如果指定,
則查詢必須是一個SQL SELECT並且必須返回至少一行記錄
testOnBorrow true 指明是否在從池中取出連線前進行檢驗,如果檢驗失敗,
則從池中去除連線並嘗試取出另一個.
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串
testOnReturn false 指明是否在歸還到池中前進行檢驗
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串
testWhileIdle false 指明連線是否被空閒連線回收器(如果有)進行檢驗.如果檢測失敗,
則連線將被從池中去除.
注意: 設定為true後如果要生效,validationQuery引數必須設定為非空字串
timeBetweenEvictionRunsMillis -1 在空閒連線回收器執行緒執行期間休眠的時間值,以毫秒為單位.
如果設定為非正數,則不執行空閒連線回收器執行緒
numTestsPerEvictionRun 3 在每次空閒連線回收器執行緒(如果有)執行時檢查的連線數量
minEvictableIdleTimeMillis 1000 * 60 * 30 連線在池中保持空閒而不被空閒連線回收器執行緒
(如果有)回收的最小時間值,單位毫秒
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2212899/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- swoole 之建立一個 MySQL 連線池 學習分享記錄 [持續更新]MySql
- 設計一個可靠的連線池
- 實現一個redis連線池Redis
- 記錄連線數導致警報失效,連線池少問題
- 個人BUG記錄
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- 記錄一下MySQL的連線MySql
- 記錄一個前端bug的解決過程前端
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- 連線池
- 記錄一個cpu彪高的BUG處理--jvm調優JVM
- 【問題記錄】—SignalR連線斷線重連SignalR
- 記錄一個HttpClient超時連線配置不生效的問題排查過程HTTPclient
- 記錄一次spark連線mysql遇到的問題SparkMySql
- JDBC連線MySQL8.0.13的記錄JDBCMySql
- Tomcat 的 JDBC 連線池TomcatJDBC
- HTTP連線池HTTP
- django連線池Django
- 記錄一個Flutter 3.24單元測試點選事件bugFlutter事件
- Http持久連線與HttpClient連線池HTTPclient
- 連線池和連線數詳解
- HikariCP連線池的學習
- golang連線MySQL時候的連線池設定GolangMySql
- 自定義連線池
- ElasticSearch連線池建立Elasticsearch
- 前端小bug記錄前端
- 一次性講清楚「連線池獲取連線慢」的所有原因
- 記錄一次一次監聽無法連線的錯誤
- 更新一張與另一張表關聯的連線欄位記錄
- 記錄一次預釋出環境的 Bug
- ServiceStack.Redis的原始碼分析(連線與連線池)Redis原始碼
- 清除“遠端桌面連線”的歷史記錄
- Druid-目前最好的連線池UI
- C#中的連線池管理C#
- Swoole MySQL 連線池的實現MySql
- TCP連線狀態異常記錄TCP
- Go語言之從0到1實現一個簡單的Redis連線池GoRedis
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼