Java数据库连接池(BoneCP vs DBPool vs c3p0)

时间:2011-11-08 21:11:03

标签: java database connection-pooling c3p0 bonecp

对于J2EE容器的外部,哪个连接池库最好?

  • 我听说c3p0已经过时了。
  • 雅加达的公共池库已不再开发

因此我留下了BoneCPDBPool。据我所知,两者的活动都有限。我可以看到的主要区别是性能,BoneCP似乎赢得了。但是文档非常薄弱。

您在现实世界中使用了哪个数据库池库?为什么?有什么好处和坏处?

6 个答案:

答案 0 :(得分:16)

在工作中我们使用了BoneCP(作为c3p0的替代品),据我所知,没有任何问题(我自己没有进行升级)。从我所看到和阅读它看起来像一个精心设计的实体库,我个人会使用它而不是其他选择:它似乎是那些很好用的“正常工作”库之一。

对于DBPool没有任何负面评价,我对它不够熟悉;虽然查看其网站文档肯定似乎是一个加号。

答案 1 :(得分:4)

我们在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;
            }

所以你必须考虑的事情:

  1. 支持和活动(正如您所说)
  2. 速度
  3. 监控,记录和生产控制
  4. BoneCP看起来很快(我之前没有听说过)但老实说C3P0对我们而言也是如此。回到4年或5年前我们测试过DBCP非常缓慢(他们似乎已经修复了),Oracle的池速度相当慢,而且C3P0非常快。我们的测试非常类似于BoneCP网站上的测试。

    我对BoneCP的可管理性一无所知。 #3已经证明是我们生产环境中最重要的功能。

答案 2 :(得分:2)

看看HikariCP取代了BoneCP https://brettwooldridge.github.io/HikariCP/这是我现在在项目中使用的那个。

答案 3 :(得分:1)

几年前我们做出选择时,它只是在c3p0和dbcp之间。那时c3p0是在oracle重启后可以重建其连接的那个。使用DBCP,我们不得不重新启动应用服务器以使其再次运行。

此外,我发现c3p0调试挂起连接功能对跟踪连接泄漏非常有用,否则很难找到。

我从c3p0中遗漏的内容对于已执行的语句来说是有用的日志记录,其中包含有关它们花费多长时间的信息。

答案 4 :(得分:0)

我目前正在大型企业内部网环境中试用BoneCP。我对c3p0有一致的线程问题(如果你在附近挖掘很常见),所以我做了我的研究,它似乎是最好的库存库。配置是一个练习,但一旦你把它弄下来,它似乎很棒。

答案 5 :(得分:0)

我正在使用c3p0和DataNucleus / JPA,很容易切换到BoneCP。实际上,我所要做的就是更改Spring上下文文件中的DataSource配置。

据我所知,BoneCP基准测试非常好:http://www.databaseskill.com/2282333/http://jolbox.com/benchmarks.html