【发布时间】:2016-06-08 18:35:42
【问题描述】:
致 stackoverflow 社区的人们。我正在寻求有关 HikariCP 连接池问题的帮助。
高级: 我正在尝试使用线程池创建多个线程,我的计划是为每个工作线程提供与 HikariCP 的单独连接,但 HikariCP 所做的是它在多个线程之间共享一个公共连接。我正在使用
public synchronized Connection getConnection() throws SQLException
{
synchronized (dataSource) {
return dataSource.getConnection();
}
}
检索数据库连接。现在,当我关闭一个连接时,我看到其他线程中的问题说连接已关闭并且线程正在处理的一批记录被丢弃。
以下是我的日志文件中的 stmts:
2016-06-08 11:52:11,000 DEBUG [com.boxer.delete.SmartProcessWorker] (pool-1-thread-6:) Closing DB connection ConnectionJavassistProxy(1551909727) wrapping oracle.jdbc.driver.T4CConnection@7b4f840f
2016-06-08 11:52:11,002 DEBUG [com.boxer.delete.SmartProcessWorker] (pool-1-thread-9:) Closing DB connection ConnectionJavassistProxy(1511839669) wrapping oracle.jdbc.driver.T4CConnection@343b8714
2016-06-08 11:52:11,014 ERROR [com.boxer.delete.SmartProcessWorker] (pool-1-thread-5:) SQLException trying to Execute pstmt batch
2016-06-08 11:52:11,014 ERROR [com.boxer.delete.SmartProcessWorker] (pool-1-thread-5:) Connection is closed
java.sql.SQLException: Connection is closed
at com.zaxxer.hikari.proxy.ConnectionProxy.checkClosed(ConnectionProxy.java:275)
at com.zaxxer.hikari.proxy.ConnectionJavassistProxy.commit(ConnectionJavassistProxy.java)
at com.boxer.delete.SmartProcessWorker.processRecords(SmartProcessWorker.java:219)
at com.boxer.delete.SmartProcessWorker.run(SmartProcessWorker.java:174)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
现在,有人可以帮助我如何从 hikari 数据源获取 Db 连接,而该数据源显然没有被任何其他线程共享?
【问题讨论】:
-
您找到解决问题的方法了吗?如果是,请您指出正确的方向,我和您的情况相同。提前谢谢你。
标签: multithreading concurrency database-connection connection-pooling hikaricp