記錄阿里巴巴連線池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
- 記錄一個mysql連線慢的問題MySql
- 設計一個可靠的連線池
- 實現一個redis連線池Redis
- 記錄連線數導致警報失效,連線池少問題
- 記錄一下MySQL的連線MySql
- 一個資料庫連線池的問題資料庫
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- 【SQL 學習】表連線--natural join 的一個bugSQL
- 記錄一個前端bug的解決過程前端
- 自己實現一個資料庫連線池資料庫
- Redis筆記2:Jedis連線池Redis筆記
- 連線池
- 問個jrun連線池的問題
- 一個不錯的JDBC連線池教程(帶具體例子)JDBC
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- 反連線,最快返回第一條記錄
- BUG 解決記錄 一
- Go連線池Go
- HTTP連線池HTTP
- django連線池Django
- 記錄一次spark連線mysql遇到的問題SparkMySql
- 記錄一個HttpClient超時連線配置不生效的問題排查過程HTTPclient
- JDBC連線MySQL8.0.13的記錄JDBCMySql
- 記錄集連線步驟
- 【問題記錄】—SignalR連線斷線重連SignalR
- 記錄一個cpu彪高的BUG處理--jvm調優JVM
- [轉]阿里巴巴資料庫連線池 druid配置詳解阿里資料庫UI
- Http持久連線與HttpClient連線池HTTPclient
- 連線池和連線數詳解
- golang連線MySQL時候的連線池設定GolangMySql
- Tomcat 的 JDBC 連線池TomcatJDBC
- Proxool 連線池的配置使用
- 有關連線池的疑惑。
- HikariCP連線池的學習
- ElasticSearch連線池建立Elasticsearch
- 自定義連線池
- golang tcp連線池GolangTCP