關於java通過proxool連線資料庫多資料來源的問題
阿新 • • 發佈:2019-01-23
公司一直是處理大資料這個方面,對資料庫操作頻繁在所難免,關於資料庫連線方式換了很多,各有優缺點,具體就不在這解釋了。
之前一直在用C3P0建立資料來源,但C3P0佔用資源不能及時的釋放,導致資料庫連線數經常丟擲警告資訊(被鎖死),雖然不影響執行,但這樣下去也不是辦法,所以決定換個資料來源方式,通過proxool建立資料來源。
其他配置不許改變,只是需要改下配置資料來源資訊即可
引用的JAR:<span style="font-size:18px;"><bean id="XXX" class="org.logicalcobwebs.proxool.ProxoolDataSource"> <span style="color:#ff0000;"><!-- <property name="alias" value="XXX"></property> --></span> <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property> <property name="driverUrl" value="jdbc:oracle:thin:@IP:1521:ORCL"></property> <property name="user" value="XXX"></property> <property name="password" value="XXX"></property> <!-- <property name="houseKeepingSleepTime" value="90000"></property> --> <property name="prototypeCount" value="5"></property> <property name="maximumConnectionCount" value="100"></property> <property name="minimumConnectionCount" value="10"></property> <property name="trace" value="true"></property> <property name="verbose" value="true"></property> </bean></span>
<span style="white-space:pre"> </span><dependency> <groupId>proxool</groupId> <artifactId>proxool</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>proxool</groupId> <artifactId>proxool-cglib</artifactId> <version>0.9.1</version> </dependency>
修改後執行沒有問題,但有的專案模組儲存需要建立多個數據源的情況,問題就此產生了......
配置兩個資料來源後,程式執行總是識別第一個載入的資料來源,第二個無法載入成功(但不報錯)
查了好多資料都沒有這方面的詳細說法,沒辦法只能看原始碼了和執行日誌
在才發現proxool識別不同的資料來源是根據別名來區別的,由於人比較懶,就把別名省略了,哎、
[2014-12-04 10:29:59] - INFO: Shutting down 'null' pool immediately [Shutdown Hook] [2014-12-04 10:29:59] - INFO: Stopping Prototyper thread [2014-12-04 10:29:59] - INFO: Stopping HouseKeeper thread
<pre name="code" class="html"><strong>如果加上別名就變成這樣了</strong>
[2014-12-04 10:29:59] - INFO: Shutting down '別名' pool immediately [Shutdown Hook]
[2014-12-04 10:29:59] - INFO: Stopping Prototyper thread
[2014-12-04 10:29:59] - INFO: Stopping HouseKeeper thread
經實踐證明,在配置資訊上加上別名就解決了多個數據源的問題
這個問題解決了,有發現了一個新的問題,在對系統進行壓力測試時,多個執行緒同時操作資料庫,過一段時間會出現如下問題
We are already in the process of making 11 connections and the number of simultaneous builds has been throttled to 10
可以說是執行緒太多造成的(連線數不能及時釋放),但這不是根本原因,現在正在測試階段,後續會更新......