Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich verhindern, dass Hibernate + c3p0 + MySql eine große Anzahl schlafender Verbindungen erstellt?

Wenn Sie einen Verbindungspool verwenden, rufen Sie Connection#close() auf schließt die Verbindung nicht physisch, sondern gibt sie zur späteren Wiederverwendung an den Pool zurück. Mit anderen Worten, die Verbindung bleibt offen und das ist der springende Punkt bei der Verwendung eines Pools.

Nun, das ist das Problem. Sie erstellen eine SessionFactory immer wieder (wobei jeder seinen eigenen Pool erstellt), während Sie ihn nur einmal erstellen sollten für die gesamte Lebensdauer Ihrer Anwendung. Wenn Sie kein bestimmtes Framework verwenden, wird dies normalerweise in einer Dienstprogrammklasse (dem berühmten HibernateUtil Klasse).

Das offizielle Hibernate-Tutorial hat ein sehr einfaches Beispiel für eine solche Klasse. Oder siehe dieses hier das ist etwas reichhaltiger.