【发布时间】:2012-10-19 04:57:45
【问题描述】:
我已经浏览了一段时间,并且在此过程中咬牙切齿,但找不到与我的问题完全匹配的问题。
简而言之,在 60 秒不活动后,我得到了极好的堆栈跟踪(org.apache.tomcat.jdbc.pool.ConnectionPool 放弃),这是几个服务器端线程的正常行为。
我直接使用 Tomcat JDBC 连接池 (org.apache.tomcat.jdbc.pool.DataSource)
堆栈跟踪:
我的 PoolProperties 配置如下:
PoolProperties pp = new PoolProperties();
pp.setUrl( someValidUrl);
pp.setDriverClassName("com.mysql.jdbc.Driver");
pp.setUsername( someUser);
pp.setPassword( somePassword);
pp.setJmxEnabled( true);
pp.setTestWhileIdle( true);
pp.setTestOnBorrow( true);
pp.setValidationQuery( "SELECT 1");
pp.setTestOnReturn( false);
pp.setValidationInterval(30000);
pp.setTimeBetweenEvictionRunsMillis(30000);
pp.setMaxActive(100);
pp.setInitialSize(10);
pp.setMaxWait(10000);
pp.setMinEvictableIdleTimeMillis(30000);
pp.setMinIdle(10);
pp.setLogAbandoned(true);
pp.setRemoveAbandoned(true);
pp.setRemoveAbandonedTimeout(60);
pp.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
setPoolProperties(pp);
我希望 setValidationInterval(30000) 能救我,因为 30 秒在连接生命周期中并不多。无论如何,问题是:
为了让这种联系永远存在,我缺少什么?
很高兴知道:为什么我在声明连接的函数中超时,尽管它在 30 秒前被调用。
【问题讨论】:
标签: java mysql tomcat connection-pooling