我正在使用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如何处理同一类和数据源的倍数肯定有问题。
其他人有这个问题吗?