公司一直是处理大数据这个方面,对数据库操作频繁在所难免,关于数据库连接方式换了很多,各有优缺点,具体就不在这解释了。
之前一直在用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
可以说是线程太多造成的(连接数不能及时释放),但这不是根本原因,现在正在测试阶段,后续会更新......