我们在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已经证明是我们生产环境中最重要的功能。