我听说jbdc存在多线程访问问题。我也听过另一篇文章中推荐的boneCP,但是我想知道是否还有其他人使用过另一个他们发现异步的东西容易和高性能
此外,Apache版本表示它可能无法在java 1.6之上工作,而且我正在使用java.runtime.version:1.7.0_07-b11
答案 0 :(得分:1)
在实践中尝试了其他一些API后,我最终决定使用BoneCP。我在Java 1.7中使用它,即使在高并发情况下也能很好地工作。此外,开发人员在报告问题时也会做出响应。
我之前使用过C3P0,但是在我切换到BoneCP后,它有一些非常奇怪的错误消失了。如果你对C3P0进行一些挖掘,你会发现它已经好几年未被触及,并且开发工作刚刚恢复。它在我的申请中在奇怪的时候破裂了。
我使用普通Mysql JDBC包中的MysqlConnectionPoolDataSource
。然后我只需设置如下内容(您可以根据需要调整设置):
pbds = new BoneCPDataSource();
pbds.setDatasourceBean(mysqlcpds);
pbds.setMinConnectionsPerPartition(1);
pbds.setMaxConnectionsPerPartition(10);
pbds.setIdleConnectionTestPeriodInMinutes(60);
pbds.setIdleMaxAgeInMinutes(240);
pbds.setPartitionCount(1);
然后,你只是从这个对象得到Connection
(它是线程安全的。)我使用来自几个线程的相同代码; Java 7 try-with-resources 块特别方便,避免了大量样板(不需要finally
,并保证连接关闭):
try( Connection conn = pbds.getConnection() ) {
... do stuff with conn
} catch (SQLException e) {
e.printStackTrace();
}