22

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

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

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

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

4

6 回答 6

16

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

关于 DBPool 没什么可说的,我只是对它不够熟悉;尽管查看其站点文档当然似乎是一个加分项。

于 2011-11-11T03:29:24.757 回答
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. 监控、记录和生产控制

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

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

于 2011-11-08T21:30:18.863 回答
2

看看 HikariCP 替换 BoneCP https://brettwooldridge.github.io/HikariCP/这是我现在在我的项目中使用的一个。

于 2016-07-21T14:45:24.407 回答
1

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

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

我从 c3p0 中缺少的是有用的日志记录,用于记录已执行的语句以及有关它们花费了多长时间的信息。

于 2011-11-10T10:34:42.643 回答
0

我目前正在大型企业内网环境中试用 BoneCP。我在 c3p0 上遇到了一致的线程问题(如果你仔细研究的话,这是很常见的问题),所以我做了我的研究,它似乎是最好的库存库。配置有点像练习,但是一旦你把它弄下来,它看起来很棒。

于 2013-02-22T01:46:24.217 回答
0

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

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

于 2015-03-04T09:49:14.677 回答