WebApp (Tomcat-jdbc) Соединение с базой данных в пуле, выбрасывающее исключение

Я просматривал ПО в течение некоторого времени и жевал свою шляпу в процессе, но не могу найти точное соответствие своей проблеме.

Для краткости я получаю превосходную трассировку стека (org.apache.tomcat.jdbc.pool.ConnectionPool отказаться) после 60 секунд бездействия, что является нормальным поведением для пары потоков на стороне сервера.

Я использую пул соединений Tomcat JDBC (org.apache.tomcat.jdbc.pool.DataSource) напрямую

Трассировки стека:

    Oct 29, 2012 8:55:50 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon
    WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@1ad2916]:java.lang.Exception
        at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:967)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:721)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:579)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:174)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:111)
        at com.getsom.getConnection(DAO.java:1444)
        at com.getsom.PreparedConnection.(PreparedConnection.java:48)
        at 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);

Я надеялся, что setValidationInterval (30000) спасет меня, поскольку 30-е годы не так много в жизненном цикле соединения. Во всяком случае, вопрос:

Чего мне не хватает, чтобы сохранить эту связь навсегда?

Приятно знать: почему я отключил функцию, которая требовала подключения, хотя она была вызвана 30 секундами ранее.

Ответы на вопрос(7)

Ваш ответ на вопрос