На самом деле, ни весна, ни JPA иметь ничего общего с ним. Внутренне все структуры персистентности просто вызывают DataSource.getConnection()
и ожидают получить (возможно, объединенное) соединение JDBC. Как только они закончатся, они close()
соединение эффективно возвращает его в пул.
Теперь, когда DataSource
просят указать соединение, но база данных не является приемлемой, она выдает исключение. Это исключение будет распространяться и будет каким-то образом обрабатываться любой используемой структурой.
Теперь, чтобы ответить на ваш вопрос - как правило, DataSource
реализации (например, dbcp, c3p0 и т.д.) сбросит соединение, как известно, быть разорван и заменить его новым. Это действительно зависит от провайдера, но вы можете смело предположить, что как только база данных будет снова доступна, DataSource
постепенно избавится от больных соединений и заменит их здоровыми.
Также многие разработчики DataSource
предоставляют способы периодического тестирования соединения и до его возврата клиенту. Это важно в объединенных средах, где DataSource
содержит пул соединений и когда база данных становится недоступной, она не имеет возможности это обнаружить. Таким образом, некоторое тестовое соединение DataSource
s (путем вызова SELECT 1
или аналогичного), прежде чем вернуть его клиенту и сделать то же время от времени, чтобы избавиться от нарушенных соединений, например. из-за разбитого базового TCP-соединения.
TL; DR
Да, вы получите исключение и да система будет нормально работать, если база данных обратно. Кстати, вы можете легко проверить это!
Спасибо, это было именно то, что я искал. – kkiefer