tomcat jdbc pool max active不工作?

时间:2014-08-21 11:34:43

标签: java mysql spring tomcat

我使用spring jdbc模板用于app ..并将其部署在tomcat中..我想使用连接池和tomcat jdbc。我的连接配置是

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3310/mydb" /> 
    <property name="username" value="***" /> 
    <property name="password" value="***" /> 
    <property name="maxWait" value="10000" />
    <property name="removeAbandonedTimeout" value="60" />
    <property name="removeAbandoned" value="true" />
    <property name="logAbandoned" value="false" />
    <property name="initialSize" value="10" /> 
    <property name="maxActive" value="100" /> 
    <property name="minIdle" value="10" /> 
</bean> 

我不知道怎么做,但是当我运行一些测试,并检查mysql中的最大线程时,它显示活动线程超过配置中配置的maxActive。那么,为什么配置中的maxActive不起作用?以及如何使它工作?例如,maxActive是100但是当我签入mysql时,活动线程超过maxActive。

2 个答案:

答案 0 :(得分:3)

  

maxActive(int)可以的最大活动连接数   同时从此池中分配。默认值为100

     

maxIdle(int)应保留的最大连接数   游泳池在任何时候。默认值为maxActive:100空闲连接   定期检查(如果已启用)和空闲的连接   比minEvictableIdleTimeMillis更长的时间将被释放。 (也见   testWhileIdle)

所以我建议你也使用maxIdle,例如:

<property name="maxIdle" value="100">

但也许存在问题,如果您可以显示连接管理的代码,那将会有所帮助。

以下是使用Spring进行声明式和程序化事务管理的连接问题的有趣链接:Connection pool problem with Spring and programmatic transaction management

答案 1 :(得分:0)

我也遇到了同样的问题,我的tomcat版本是 tomcat 9

这是我的解决方案:您应该将 maxTotal 值设置为100,而不是 maxActive

  

maxTotal:池中最大数据库连接数。确保将mysqld max_connections配置为足够大以处理所有数据库连接。无限设置为-1。

     

FROM http://tomcat.apache.org/tomcat-9.0-doc/jndi-datasource-examples-howto.html