Как мне получить Spring Boot для автоматического подключения к PostgreSQL?

Я запускаю Spring Загрузка подключения к базе данных PostgreSQL. Я проверил, что данные записываются в базу данных, если Spring Загрузка начинается после базы данных.

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

Когда происходят изменения в базе данных при разработке, я сталкиваюсь с исключениями: PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed.

Обратите внимание, что база данных доступна снова, когда происходят исключения; Я думаю, проблема в том, что соединение устарело, потому что конечная точка базы данных, из которой она первоначально была подключена, больше не доступна из-за перезапуска. Перезапуск Spring Загрузка устраняет проблему.

Как настроить Spring Boot для повторного подключения к PostgreSQL, чтобы мне не нужно было перезапускать его?

Я попытался выполнить ответы в Spring Boot JPA - настройка автоматического повторного подключения и Как подключить базу данных, если соединение закрыто в Spring jpa?. Я не уверен, отличается ли поведение PostgreSQL от MySQL. Мое чтение Spring загрузочной документации не помогло; Я не знаю, какие компоненты описаны достаточно хорошо, чтобы понять, на какую документацию я должен смотреть.

Ответ 1

Spring boot должен быть настроен на повторное подключение автоматически, проблема в том, что он не знает о неисправном соединении.

Поскольку вы уже используете тестовый запрос по заимствованию и проверке, просто попробуйте уменьшить интервал проверки, чтобы он выполнялся каждый раз.

spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=0

Пул соединений Tomcat jdbc в тексте по заимствованию:

(boolean) Указание того, будут ли объекты проверяться до их заимствования из пула. Если объект не может быть проверен, он будет удален из пула, и мы попытаемся заимствовать другое. ПРИМЕЧАНИЕ. Для того, чтобы истинное значение имело какой-либо эффект, параметр validationQuery или validatorClassName должен быть установлен в строку, отличную от нуля. Чтобы получить более эффективную проверку, см. validationInterval. Значение по умолчанию - false

Но помните (интервал проверки):

(длинный), избегая избыточной проверки, запустите только проверку достоверности на этой частоте - время в миллисекундах. Если соединение связано с проверкой, но было проверено ранее в течение этого интервала, оно не будет проверено снова. Значение по умолчанию - 30000 (30 секунд).