私はしばらくの間SOを閲覧していて、その過程で帽子をかみ砕いていますが、私の問題に完全に一致するものを見つけることができません。
要するに、60秒間非アクティブになった後、すばらしいスタックトレース(org.apache.tomcat.jdbc.pool.ConnectionPool abandon)を取得しています。これは、いくつかのサーバー側スレッドの通常の動作です。
Tomcat JDBC接続プーリング(org.apache.tomcat.jdbc.pool.DataSource)を直接
スタックトレースを使用しています。
2012年10月29日20:55:50org.apache.tomcat.jdbc.pool.ConnectionPoolabandon 警告:接続は破棄されましたPooledConnection [com.mysql.jdbc.JDBC4Connection@1ad2916]:java.lang.Exception org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:967)で org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:721)で org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:579)で org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:174)で org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:111)で com.getsom.getConnection(DAO.java:1444)で com.getsom.PreparedConnection。(PreparedConnection.java:48)で com.getsom.Alarms.run(Alarms.java:492)で
私の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);
30秒は接続ライフサイクルではあまりないので、setValidationInterval(30000)が私を救うことを望んでいました。とにかく問題は
、この接続を永遠に維持するために何が欠けているのかということです。
知っておきたいこと:接続を要求した関数が30秒前に呼び出されたのに、なぜタイムアウトになるのですか。