我有一个用DBCP连接池初始化的Spring JdbcTemplate对象。由于他们无法从DBCP池中获取连接,所以应用程序时不时都会响应,因为它们现在已经挂起,并且它们永远保持这种状态。只有重新启动应用程序才能解决问题。
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <46251453> (a org.apache.commons.pool.impl.GenericObjectPool$Latch)
at java.lang.Object.wait(Object.java:502)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1118)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:630)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:737)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:805)
查看堆转储显示池没有对象,即 (PoolingDataSource)的数据源。(GenericPoolObject)_pool。(CursorableLinkedList)_pool。(INT)_size == 0
this - value: org.apache.commons.dbcp.BasicDataSource #2
-> dataSource - class: org.apache.commons.dbcp.BasicDataSource, value: org.apache.commons.dbcp.PoolingDataSource #1
-> _pool - class: org.apache.commons.dbcp.PoolingDataSource, value: org.apache.commons.pool.impl.GenericObjectPool #1
-> _pool - class: org.apache.commons.pool.impl.GenericObjectPool, value: org.apache.commons.pool.impl.CursorableLinkedList #1
-> _size - class: org.apache.commons.pool.impl.CursorableLinkedList, value: int 0
在空闲指定的阈值(10分钟)之后,似乎汇集的连接被逐出,然后没有创建新的连接。
任何线索?
我启用了DBCP放弃连接日志记录,超时约为20分钟。有许多被遗弃的连接。但是,由于连接创建和发布是通过Spring JDBCTemplate进行的,因此我无法明确地进行任何连接处理。我仍在努力解决这个难题。