我有一个应用程序,我使用BoneCP进行连接池,当我将war部署到tomcat时,它运行得很好。但是当我创建另一个战争(几乎完全相同,只是不同的皮肤和数据库连接)和部署它们时,我在tomcat启动时收到以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
请注意,在一段时间后不会发生这种情况,因此我不会因为没有关闭它们而是在启动时泄漏连接。
我的spring配置中的hibernate / boneCP连接属性如下:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.provider_class">com.jolbox.bonecp.provider.BoneCPConnectionProvider</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">${connection.url}</prop>
<prop key="hibernate.connection.username">${connection.username}</prop>
<prop key="hibernate.connection.password">${connection.password}</prop>
<prop key="bonecp.idleMaxAge">60</prop>
<prop key="bonecp.idleConnectionTestPeriod">5</prop>
<prop key="bonecp.partitionCount">3</prop>
<prop key="bonecp.acquireIncrement">10</prop>
<prop key="bonecp.maxConnectionsPerPartition">60</prop>
<prop key="bonecp.minConnectionsPerPartition">20</prop>
<prop key="bonecp.statementsCacheSize">50</prop>
<prop key="bonecp.releaseHelperThreads">3</prop>
</props>
</property>
....
有人有任何想法吗?
答案 0 :(得分:4)
根据this帖子:
这是你问过的一个标志 BoneCP然后创建更多连接 你的mysql服务器配置为 接受。要么增加数量 连接mysql将允许(通过 mysql管理员)或告诉bonecp 创建更少的连接。
默认情况下,MySQL允许您创建 只是几个连接,所以我会 首先从那开始。
P.S。抱歉,验证码测试 - 我获得的spambot尝试的数量 打得很难以置信;我要去 把它变成一个档次。
您必须减少bonecp.maxConnectionsPerPartition
,或修改MySQL服务器的配置以接受60 * number of instances of your app
个并发连接。
答案 1 :(得分:2)
你创建了3个分区,每个分区最多有60个连接,所以你在那里用180个连接命中mysql(mysql中的默认值远远低于那个)。