2010-05-10 37 views
2

我對連接池庫並不熟悉。我剛剛通過這個blog article發現它),我不確定我應該在基於grails/hibernate/mysql的web應用程序中使用它。我需要在我的(grails)web應用程序中使用C3P0池庫嗎?

所以我的問題很簡單:在哪種情況下,你會建議將連接池庫集成到grails應用程序中?永遠,永不或僅在某些連接閾值?

P.S. :如果您曾在您的Web應用程序中成功使用C3P0,我將非常感謝您聽取您的反饋(就可見的積極影響而言)。

回答

1

無論哪個池實施,您的應該在您的Web應用程序中始終使用連接池。打開與數據庫的連接是一項非常昂貴的任務,能夠重複使用已經存在的空閒連接,極大地提高了您的網站性能。

連接可以由應用程序服務器(Tomcat,JBoss,Glassfish ...)或您的應用程序管理。後者更容易設置,但每個部署都很難定製。在應用程序上配置連接池並將您的站點設置爲使用它可以輕鬆調整連接池參數,例如:最小連接數保持打開,最大空閒時間等等。

+0

Thx!根據這個插件http://www.grails.org/plugin/jdbc-pool,Grails有一個默認的Grails Commons DBCP Pool。這是否意味着grails通過應用程序(而不是應用程序服務器)管理數據庫連接?如果我用Tomcat JDBC Pool替換它,它現在可能會有更好的性能? – fabien7474 2010-05-10 22:05:10

+1

是的,默認情況下它是由應用程序。 Commons DBCP是非常成熟的連接,但是如果連接數量增加時表現不佳並且變得更糟。這是一個轉換到Tomcat JDBC Pool的好選擇,它是一個新的實現,我正在研究它,看起來非常有前途。 – 2010-05-10 23:02:13

0

C3P0是一個非常體面的池,但我仍然建議使用應用服務器或servlet引擎的連接池,並配置Grails以通過常規數據源使用它。如果不能這樣做,則使用獨立連接池(在這種情況下,C3P0是一個不錯的選擇)。

+1

嗨帕斯卡。 Thx爲您的答案。不幸的是它給我帶來了更多的問題:-)應用程序服務器的連接池是什麼(我在Tomcat上運行我的應用程序)? Grails是否默認使用應用程序服務器的連接池?它在DataSource中是pooled = true嗎? – fabien7474 2010-05-10 15:12:29

1

我的經驗非常有限,但我最終使用C3P0的原因很簡單,因爲Hibernate似乎無法處理MySQL重新啓動。我每天早上都收到了一個「破碎的管道」,因爲我們的託管服務每晚都重新啓動MySQL。

我對它進行了搜索,我唯一能找到的建議是使用...應用服務器或C3P0的連接池。對我來說,後者工作得很好。

+0

我在午夜後每天都有同樣的破管問題,我們有2臺服務器,並且有一臺因此而停機。但是,自從很久以來,mysql永遠不會重新啓動。你仍然建議使用C3P0來解決相同的問題嗎? – 2015-11-03 08:06:57

+1

那麼,這已經五年了,情況有所不同,所以我無法確定。但C3P0的代碼仍然存在於我的應用程序中,並且我沒有任何損壞的管道,所以我不會刪除它:-)我會說試一試! – wwwclaes 2015-11-03 08:30:56

1

我總是使用連接池的原因有兩個:

  1. 因爲打開連接是一項昂貴的操作
  2. 它死了,簡單的設置一個透明地工作,所以沒有真正的好處,使用一個。

如果你已經在使用休眠,只需要修改你的hibernate.cfg.xml的connection.provider_class使用org.hibernate.connection.C3P0ConnectionProvider和扔C3P0 jar文件到你的servlet的WEB-INF/lib文件夾。完成。

如果您使用JNDI和GlobalNamingResources申報,修改屬性指向com.mchange.v2.c3p0.ComboPooledDataSource和扔C3P0罐子到Tomcat的/ lib文件夾。完成。

相關問題