Sie sollten sich wirklich für C3P0-Verbindungspooling entscheiden: http://www.mchange.com/projects/c3p0/index.html#hibernate-specific
In der C3P0-Dokumentation gibt es einen Abschnitt zu diesem Thema: http://www.mchange.com/projects/c3p0/index.html#configuring_recovery
Zuerst müssen Sie c3p0 richtig konfigurieren, was im Falle der Verwendung von hibernate in der Datei c3p0.properties geschehen muss.
Legen Sie in der Datei c3p0.properties diese Eigenschaften fest, damit bei einem Ausfall der Datenbank alle 3 Sekunden ein neuer Verbindungsversuch unternommen wird:
c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false
Um zu vermeiden, dass abgebrochene Verbindungen auf unbestimmte Zeit in Ihrem Pool verbleiben, sollten Sie außerdem die Verwaltung des Verbindungsalters verwenden:
c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600
Diese sind zwar recht teuer, aber hilfreich, wenn die oben genannten Maßnahmen nicht ausreichen:
c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;
Sie sollten auch prüfen, ob es Verbindungslecks gibt, die eine Wiederherstellung verhindern:
c3p0.debugUnreturnedConnectionStackTraces = true
Vergewissern Sie sich schließlich, dass C3P0 korrekt mit Hibernate verbunden ist, aktivieren Sie die Debug-Protokollierung für das Paket "com.mchange" und sehen Sie nach, ob C3P0 Ihnen etwas über sich selbst mitteilt. Es sollte die Konfigurationseigenschaften angeben, die geladen werden, also sehen Sie nach, ob alles vorhanden ist.
Ich hoffe, das hilft.