Używam Spring Boot łączącego się z bazą danych PostgreSQL. Sprawdziłem, czy dane są zapisywane w bazie danych, jeśli Spring Boot jest uruchamiany po bazie danych.Jak uzyskać Spring Boot, aby automatycznie ponownie połączyć się z PostgreSQL?
spring.datasource.url = jdbc:postgresql://localhost/dbname
spring.datasource.username = user
spring.datasource.password = secret
spring.datasource.driver-class-name = org.postgresql.Driver
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
Kiedy występują zmiany w bazie danych w rozwoju, biegnę do wyjątków: PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed.
Zauważ, że baza danych jest dostępna ponownie, gdy występują wyjątki; Myślę, że problem polega na tym, że połączenie jest nieaktualne, ponieważ punkt końcowy bazy danych, z którym był pierwotnie połączony, nie jest już dostępny z powodu ponownego uruchomienia. Ponowne uruchomienie Spring Boot rozwiązuje problem.
Jak skonfigurować Spring Boot, aby ponownie połączyć się z PostgreSQL, więc nie trzeba go restartować?
Podjęłam próbę podążania za odpowiedziami w Spring Boot JPA - configuring auto reconnect i How to reconnect database if the connection closed in spring jpa?. Nie jestem pewien, czy zachowanie PostgreSQL jest inne niż MySQL. Moje czytanie Spring Boot documentation nie pomogło; Nie znam elementów opisanych wystarczająco dobrze, aby zrozumieć, na jaką dokumentację powinienem patrzeć.
Z jakiej puli połączeń korzystasz? Jeśli go nie używasz, możesz spróbować przełączyć się na Hikari. W przeszłości widziałem takie problemy z 'tomcat-jdbc', który jest domyślną pulą połączeń. –
Masz test na pożyczkę, ale prawdopodobnie także chcesz ustawić kontrolę, gdy upłynie limit czasu bezczynności i bezczynności. W ten sposób połączenia są regularnie sprawdzane i usuwane z puli, jeśli są nieprawidłowe. –
@AndyWilkinson Myślę, że używam tomcat-jdbc, ponieważ mój pom zawiera spring-boot-starter-jdbc. – mattm