1. 程式人生 > >關於java通過proxool連線資料庫多資料來源的問題

關於java通過proxool連線資料庫多資料來源的問題

公司一直是處理大資料這個方面,對資料庫操作頻繁在所難免,關於資料庫連線方式換了很多,各有優缺點,具體就不在這解釋了。

之前一直在用C3P0建立資料來源,但C3P0佔用資源不能及時的釋放,導致資料庫連線數經常丟擲警告資訊(被鎖死),雖然不影響執行,但這樣下去也不是辦法,所以決定換個資料來源方式,通過proxool建立資料來源。

其他配置不許改變,只是需要改下配置資料來源資訊即可

<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>
引用的JAR:
<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

可以說是執行緒太多造成的(連線數不能及時釋放),但這不是根本原因,現在正在測試階段,後續會更新......