2016-08-08 3 views
1

Ich arbeite an einem Web-Projekt, in dem ich c3p0 in Web-Services verwendet habe. Ich habe die folgenden Parameter in hibernate.cfg.xml file.But konfiguriert, obwohl ich max_size 10000 gegeben habe und Leerlauf Testzeitraum ist 30, manchmal Mysql Server bietet keine andere Verbindung zu db.so die Website wird geladen und geladen, bis ich meinen Server neu starten. Und meine im Protokoll zeigt "zu viele Verbindung sind geöffnet". Was ich vermisse in der folgende Konfiguration.Bitte helfen Sie mir ausVerbindungen sind manchmal nicht verfügbar in 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> 

Antwort

0

Sie haben sehr wahrscheinlich eine Verbindung Leck. Eine gigantische Poolgröße wird damit nicht wirklich helfen. Bitte sehen Sie here.

Anhang: Stabile Ressourcen Cleanup Idiom

Es ist am besten, wenn Sie try with resources verwenden können. Wenn Sie jedoch mit einer älteren Version von Java (vor Java 7) oder mit Ressourcen arbeiten, die AutoCloseable nicht implementieren, müssen Sie möglicherweise auf diese Art von Vorgang zurückgreifen.

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(); } 
} 

Beachten Sie, dass die finally-Klausel wird auf jeden Fall ausgeführt werden, wenn die Verbindung erfasst wird, und es ist ein Best-Versuch close() jeder Ressource: Wenn or schließen fehlschlägt(), wird diese Ausnahme nicht Verhindern Sie den Versuch, die Verbindung zu schließen() Verbindung.

Sie müssen sehr vorsichtig sein. Wie Keynes es treffend ausdrückte, gibt es viele Versprecher zwischen der Tasse und der Lippe.

+0

Ja, ich verstehe, aber ich schließe jede Sitzung, die in Dao-Ebene wie \t geöffnet ist \t sessionobj.clear(); \t \t \t sessionobj.flush(); \t \t \t sessionobj.close(); – Vicky

+0

so denken Sie. verwenden Sie Java 7+ try-with-resources oder das umständliche, altmodische robuste Bereinigungs-Idiom? siehe http://StackOverflow.com/Questions/11784674/Spring-C3P0-Postgres/11786683#11786683 Wenn Sie versuchen, Parameter beschrieben auf den obigen Link, ich vermute, dass Sie sehen, dass Sie nicht sind. Ich könnte falsch liegen! Aber das Schließen von Sitzungen nach dem Gebrauch ist nicht genug. Ausnahmen passieren. –

+0

Mein goto Robotic-Resource-Cleanup-Link scheint abgelaufen zu sein, ich habe den Post mit einer Erklärung aktualisiert (scraped von [hier] (https://sourceforge.net/p/c3p0/mailman/c3p0-users/?viewmonth) = 200811)). –

Verwandte Themen