Ответ 1
Самый простой способ - указать свойство autoReconnect
в URL-адресе JDBC, хотя это не рекомендуется.
spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true
Это может привести к проблемам при активном подключении, а во время транзакции произойдет что-то, и произойдет повторное подключение. Он не будет давать проблем, когда подключение будет подтверждено в начале транзакции, и новое соединение будет приобретено с самого начала.
Однако, вероятно, лучше включить проверку ваших соединений в течение всего срока службы вашего приложения. Для этого вы можете указать несколько свойств.
Сначала запустите, указав максимальное количество подключений, которое вы разрешаете для пула. (Для ознакомления с определением максимального количества пустых значений прочтите this).
spring.datasource.max-active=10
Вы также можете указать количество начальных соединений
spring.datasource.initial-size=5
Далее вы хотите указать минимальное и максимальное количество незанятых соединений.
spring.datasource.max-idle=5
spring.datasource.min-idle=1
Чтобы проверить соединение, вам нужно указать запрос проверки и когда нужно проверить. Как вы хотите периодически проверять, а не когда соединение извлекается из пула (это предотвращает поврежденные соединения в вашем пуле).
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
Теперь, когда вы также проверяете время простоя, вы должны указать, как часто вы хотите запускать этот запрос для соединений и когда соединение считается бездействующим.
spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)
Все это должно инициировать проверку ваших (незанятых) соединений, а также при возникновении исключения или прохождении периода соединения ваши соединения будут удалены из пула.
Предполагая, что вы используете Tomcat JDBC в качестве пула соединений this, вам приятно читать, что и как настроить.