多个连接Poolers在Spring中没有返回到池的连接

时间:2017-02-25 20:10:05

标签: java mysql database-connection connection-pooling apache-commons-dbcp

我正在使用dbcp2(带有MySql的2.1.1),我的连接处于睡眠状态。我有三个chekced我的代码,我正在关闭所有我在finally块中的连接....但是,在10次调用数据库后......系统挂起。

但是我使用多个连接池。像这样:

<bean id="onedataSource"    class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    ...
    <property name="initialSize" value="5" />
    <property name="maxTotal" value="10" />
</bean>

<bean id="twodataSource"    class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <...
    <property name="initialSize" value="5" />
    <property name="maxTotal" value="10" />
</bean>

<bean id="threedataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" >
     <property name="driverClassName" value="com.mysql.jdbc.Driver" />
   ...
   <property name="initialSize" value="5" />
   <property name="maxTotal" value="10" />
</bean>

原因是我们有3种不同的模式,具有不同的名称/密码

我这样做错了吗?如何将连接返回池中?

编辑:使用记录器,我可以说datasource.getConnection()是代码挂起的地方。

当我运行SHOW FULL PROCESSLIST时,我得到这些:“状态”为空,“命令”为睡眠

'2205592', 'user', '10.0.0.87:48520', 'oneschema', 'Sleep', '8975', '', NULL

更新

所以我认为这可能是连接本身的问题。所以我去把它们中的一个更改为HikariCP(这本身就是从6秒到1.5的一些调用,所以我强烈建议它通过dbcp,但我离题了)我重启,然后!一切都很好。没有悬挂,连接返回到池中。一切都是对的。

当然,我然后去改变其他2,然后!错误又回来了! Spring如何处理同一类和数据源的倍数肯定有问题。

其他人有这个问题吗?

0 个答案:

没有答案