2016-08-08 29 views
1

我正在使用web服務中的c3p0在web項目中工作。我在hibernate.cfg.xml文件中配置了以下參數。但即使我已經給出了max_size是10000和閒置測試期間是30,有時MySQL服務器不提供另一個連接到數據庫。所以網站正在加載和加載,直到我重新啓動我的服務器。而我的日誌顯示「太多連接打開」。我在想什麼以下配置請幫助我連接在c3p0中有時不可用

<property name="hibernate.c3p0.min_size">10</property> 
     <property name="hibernate.c3p0.max_size">10000</property> 
     <property name="hibernate.c3p0.max_statements">5000</property> 
     <property name="hibernate.c3p0.maxIdleTime">1000</property> 
     <property name="hibernate.c3p0.maxIdleTimeExcessConnections">500</property> 
     <property name="hibernate.c3p0.acquire_increment">100</property> 
     <property name="hibernate.c3p0.idle_test_period">30</property> 
     <property name="hibernate.c3p0.validate">true</property> 
     <property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property> 
     <property name="hibernate.c3p0.testConnectionOnCheckin">true</property> 
     <property name="hibernate.c3p0.testConnectionOnCheckout">false</property> 

回答

0

您很可能有一個連接泄漏。一個巨大的游泳池的大小不會真的有幫助。請參閱here

附錄:強大的資源清理成語

這是最好的時候,你可以使用try with resources。但是,如果您正在使用較舊版本的Java(Java 7之前版本),或者使用不實施AutoCloseable的資源,則可能仍需要恢復到此類。

Connection c  = null; 
OtherResource or = null; 

try 
{ 
    c = cpds.getConnection(); 
    or = getOtherResource() 

    // do stuff 
    // ... 
} 
finally 
{ 
    try { if (or != null) or.close(); } 
    catch (Exception e) { e.printStackTrace(); } 

    try { if (c != null) c.close(); } 
    catch (Exception e) { e.printStackTrace(); } 
} 

注意,如果連接獲取的最終條款肯定會被執行,並且在每個資源的最佳嘗試close()方法:如果or 無法關閉(),該異常不會防止嘗試關閉()連接。

你必須非常小心。正如凱恩斯所說的那樣,杯子和嘴脣之間有許多差距。

+0

是的,我明白了,但我正在關閉每一個會議,這是開放的道層像\t \t sessionobj.clear(); \t \t \t sessionobj.flush(); \t \t \t sessionobj.close(); – Vicky

+0

讓你想想。你使用Java 7+試用資源,還是使用繁瑣的老式強大的資源清理方法?請參閱http://stackoverflow.com/questions/11784674/spring-c3p0-postgres/11786683#11786683如果您使用上述鏈接中描述的嘗試參數,我懷疑你會看到你不是。我可能是錯的!但使用後關閉會議還不夠。例外發生。 –

+0

我的強大的資源清理鏈接似乎已過期,我已經更新了該帖子的解釋(從[這裏](https://sourceforge.net/p/c3p0/mailman/c3p0-users/?viewmonth = 200811))。 –