我使用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。
答案 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。