【发布时间】:2017-01-26 13:51:31
【问题描述】:
我正在运行连接到 PostgreSQL 数据库的 Spring Boot。如果在数据库之后启动 Spring Boot,我已经验证了数据已写入数据库。
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 Boot 即可解决此问题。
如何配置 Spring Boot 以重新连接到 PostgreSQL,这样我就不需要重新启动它了?
我已尝试关注Spring Boot JPA - configuring auto reconnect 和How to reconnect database if the connection closed in spring jpa? 中的答案。我不确定 PostgreSQL 的行为是否与 MySQL 不同。我对Spring Boot documentation 的阅读没有帮助;我不太了解所描述的组件,无法理解我应该查看哪些文档。
【问题讨论】:
-
您使用的是哪个连接池?如果您不使用它,您可能想尝试切换到 Hikari。我过去曾在
tomcat-jdbc看到过类似的问题,这是目前的默认连接池。 -
您已经对借用进行了测试,但您可能还想设置空闲和空闲超时时的检查。这样会定期检查连接,如果无效,则将其从池中删除。
-
@AndyWilkinson 我想我正在使用 tomcat-jdbc 因为我的 pom 包含 spring-boot-starter-jdbc。
标签: java spring postgresql spring-boot spring-jdbc