Вы действительно должны пойти на пул соединений C3P0: http://www.mchange.com/projects/c3p0/index.html#hibernate-specific
В документации по C3P0 есть раздел на эту тему: http://www.mchange.com/projects/c3p0/index.html#configuring_recovery
Сначала вы должны правильно настроить c3p0, которыйв случае использования hibernate должен произойти в файле c3p0.properties.
В ваших c3p0.properties поместите эти свойства для повторной попытки повторного подключения каждые 3 секунды, когда база данных не работает:
c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false
Также, чтобы избежать разрыва соединений, лежащих в вашем пуле на неопределенный срок, используйте управление возрастом соединений:
c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600
Это может быть довольно дорого, но полезно, если вышеуказанного недостаточно:
c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;
Вы можететакже хотите проверить наличие утечек соединения, которые препятствуют восстановлению:
c3p0.debugUnreturnedConnectionStackTraces = true
И, наконец, убедитесь, что C3P0 правильно подключен к Hibernate, включите ведение журнала отладки для пакета "com.mchange" и посмотрите, сообщает ли C3P0 что-нибудь.о себе.Он должен указывать свойства конфигурации, которые загружены, поэтому посмотрите, все ли там.
Надеюсь, это поможет.