Najprostszym sposobem jest określenie autoReconnect
w adresie URL JDBC, chociaż nie jest to zalecane podejście.
spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true
Może to powodować problemy, gdy masz aktywne połączenie i podczas transakcji coś się dzieje i nastąpi ponowne połączenie. Nie spowoduje to problemów, gdy połączenie zostanie zweryfikowane na początku transakcji i na początku zostanie nabyte nowe połączenie.
Jednak prawdopodobnie lepiej jest włączyć sprawdzanie poprawności połączeń w czasie życia aplikacji. W tym celu możesz określić kilka właściwości .
Najpierw zacznij od określenia maksymalnej liczby połączeń, które zezwalasz na pulę. (Aby przeczytać o określaniu maksymalnego rozmiaru puli, przeczytaj to ).
spring.datasource.max-active=10
Możesz również określić liczbę początkowych połączeń
spring.datasource.initial-size=5
Następnie chcesz określić minimalną i maksymalną liczbę nieaktywnych połączeń.
spring.datasource.max-idle=5
spring.datasource.min-idle=1
Aby zweryfikować połączenie, musisz określić zapytanie sprawdzające i kiedy sprawdzać. Ponieważ chcesz sprawdzać okresowo, a nie wtedy, gdy połączenie jest pobierane z puli (aby zapobiec zerwaniu połączeń w Twojej puli).
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
UWAGA: Użycie validation-query
jest faktycznie odradzany, ponieważ JDBC4 ma lepszy/inny sposób sprawdzania poprawności połączenia. HikariCP automatycznie wywoła metodę walidacji JDBC, gdy będzie dostępna.
Teraz, gdy sprawdzasz również, gdy połączenie jest bezczynne, musisz określić, jak często chcesz uruchamiać to zapytanie dla połączeń i kiedy połączenie jest uważane za bezczynne.
spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)
To wszystko powinno uruchomić walidację twoich (bezczynnych) połączeń, a gdy wystąpi wyjątek lub minie okres bezczynności, twoje połączenia zostaną usunięte z puli.
Zakładając, że używasz Tomcat JDBC jako puli połączeń to to fajna lektura o tym, co i jak skonfigurować.
AKTUALIZACJA: Spring Boot 2.x zmienił domyślną pulę połączeń na HikariCP zamiast Tomcat JDBC.