Java Database connection pool (BoneCP vs DBPool vs c3p0)

对于 J2EE 容器之外的 Java 应用程序,哪个连接池库是最好的?

  • 我听说c3p0已经过时了。
  • 雅加达的公共泳池图书馆不再开发中

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

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


答案 1

在工作中,我们使用BoneCP(作为c3p0的替代品),据我所知没有任何问题(我自己没有进行升级)。从我所看到和读到的情况来看,它似乎是一个设计精良的可靠库,我个人会使用它而不是替代方案:它似乎是那些“只是工作”的库之一,很好用。

关于DBPool没有什么负面的说法,我只是对它不够熟悉;虽然查看其网站文档似乎是一个加分项。


答案 2

我们在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. 监控、日志记录和生产控制

BoneCP看起来很快(我以前从未听说过它),但老实说,C3P0对我们来说也很快。当我们在4或5年前测试时,DBCP非常慢(他们似乎已经修复了这个问题),Oracle的池相当慢,C3P0非常快。我们的测试看起来非常像BoneCP网站上的测试。

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


推荐