2011-11-08 46 views
22

對於J2EE容器的外部的Java應用,哪個連接池庫最好?Java數據庫連接池(BoneCP vs DBPool vs c3p0)

  • 我聽說c3p0已經過時了。
  • 雅加達的公共池庫不再是正在開發

所以我留下了BoneCPDBPool。從我可以告訴兩個有限的活動。我能看到的主要區別在於性能,BoneCP似乎贏了。但是文檔很薄弱。

您在現實世界中使用過哪個數據庫池庫,爲什麼?什麼是好與壞?

+3

對於那些好奇的人,我最終選擇了BoneCP。 –

+0

您是否有任何關於BoneCP的詳細配置文檔的鏈接?或者可以分享如何在JBoss中使用BoneCP? – 2014-01-21 13:29:11

回答

16

在工作中,我們已經使用BoneCP(作爲c3p0的替代品),據我所知沒有任何問題(我自己沒有進行升級)。從我所看到並閱讀的內容來看,它似乎是一個精心設計的實體圖書館,我個人將其用於替代品上:它似乎是那些很適合的「正常工作」圖書館之一。

沒有什麼不好說的DBPool,我只是不夠熟悉;儘管看看它的站點文檔當然看起來是一個加號。

+0

BoneCP的最新版本仍然是0.7.1,這是否意味着它仍處於「測試」階段還是足夠成熟? –

+1

請記住,版本控制非常主觀,上下文相關。所以確切的價值確實無關緊要。有些作者不願意稱他們的圖書館1.0。即使穩定之後,JDOM也需要好幾年才能到達那裏。所以我的猜測是它很穩定,很好用。 – StaxMan

+0

BoneCP頁面[鏈接](http://jolbox.com/index.html?page=http://jolbox.com/benchmarks.html)的基準看起來不錯。 – aloplop85

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已成爲我們生產環境中最重要的功能。

+0

關於特定於日誌記錄的sql語句,您是否可以不啓用java.sql包的調試日誌? – r0ast3d

+0

SpringSource池允許通過JMX進行實時檢查是我的理解。 –

+0

您也可以使用BoneCP啓用SQL日誌記錄:http://jolbox.com/bonecp/downloads/site/apidocs/index.html?com/jolbox/bonecp/BoneCPConfig.html,使用「setLogStatementsEnabled」方法。 –

1

幾年前我們做出選擇時,只是在c3p0和dbcp之間。那時c3p0是在oracle重啓之後可以重建它的連接的那個。使用DBCP,我們必須重新啓動應用程序服務器才能使其再次運行。

另外我發現c3p0調試懸掛連接功能非常有用的跟蹤連接泄漏,否則可能極難找到。

我從c3p0中遺漏的是對執行語句的有用日誌記錄,以及有關他們花了多長時間的信息。

0

我目前正在大型企業Intranet環境中試用BoneCP。我對c3p0有着一貫的線程問題(如果你四處挖掘,那麼很常見),所以我做了我的研究,看起來就像是最好的股票庫。配置是一個練習,但一旦你把它放下,它似乎很棒。