Java Database connection pool (BoneCP vs DBPool vs c3p0)
2022-09-02 01:39:25
在工作中,我们使用BoneCP(作为c3p0的替代品),据我所知没有任何问题(我自己没有进行升级)。从我所看到和读到的情况来看,它似乎是一个设计精良的可靠库,我个人会使用它而不是替代方案:它似乎是那些“只是工作”的库之一,很好用。
关于DBPool没有什么负面的说法,我只是对它不够熟悉;虽然查看其网站文档似乎是一个加分项。
我们在Tomcat内外都使用C3P0。但是,监视和日志记录并不是最好的,因此我们将开始使用SpringSource连接池。我期待的最好的功能之一是准确显示在任何特定时间正在运行的SQL语句。
我们必须添加到 C3P0 中的一件事是,当池已满且所有连接都忙时,特定连接请求等待连接的时间:
public Connection getConnection() throws SQLException
{
long t = System.currentTimeMillis();
ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
Connection conn = null;
if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
{
logger.info("Pool (" + ds.getUser() + ") full, waiting for connection");
conn = ds.getConnection();
t = System.currentTimeMillis() - t;
logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms");
}
else
{
conn = ds.getConnection();
}
return conn;
}
因此,您必须考虑的事项:
BoneCP看起来很快(我以前从未听说过它),但老实说,C3P0对我们来说也很快。当我们在4或5年前测试时,DBCP非常慢(他们似乎已经修复了这个问题),Oracle的池相当慢,C3P0非常快。我们的测试看起来非常像BoneCP网站上的测试。
我对BoneCP的可管理性一无所知。#3对我们来说是生产环境中最重要的功能。