Tôi đang chạy Spring Boot kết nối với cơ sở dữ liệu PostgreSQL. Tôi đã xác minh rằng dữ liệu được ghi vào cơ sở dữ liệu nếu Khởi động mùa xuân được khởi động sau cơ sở dữ liệu.Làm cách nào để khởi động Spring Boot tự động kết nối lại với 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
Khi có sự thay đổi trong cơ sở dữ liệu trong phát triển, tôi chạy vào trường hợp ngoại lệ: PreparedStatementCallback; SQL []; This connection has been closed.; nested exception is org.postgresql.util.PSQLException: This connection has been closed.
Lưu ý rằng cơ sở dữ liệu có thể truy cập lại khi ngoại lệ xảy ra; Tôi nghĩ rằng vấn đề là kết nối là cũ vì điểm cuối cơ sở dữ liệu nó ban đầu kết nối với không còn có sẵn vì khởi động lại. Khởi động lại Spring Boot sẽ giải quyết vấn đề.
Làm cách nào để định cấu hình Spring Boot để kết nối lại với PostgreSQL để tôi không cần khởi động lại?
Tôi đã cố gắng làm theo các câu trả lời trong Spring Boot JPA - configuring auto reconnect và How to reconnect database if the connection closed in spring jpa?. Tôi không chắc liệu hành vi PostgreSQL có khác với MySQL hay không. Đọc của tôi về Spring Boot documentation đã không giúp đỡ; Tôi không biết các thành phần được mô tả đủ tốt để hiểu tài liệu nào tôi nên xem xét.
Bạn đang sử dụng hồ bơi kết nối nào? Nếu bạn không sử dụng nó, bạn có thể muốn thử chuyển sang Hikari. Tôi đã nhìn thấy vấn đề như thế này trong quá khứ với 'tomcat-jdbc' là hồ bơi kết nối mặc định trong thời gian này. –
Bạn có kiểm tra về khoản vay, nhưng bạn cũng có thể muốn đặt séc khi không hoạt động và không hoạt động. Bằng cách đó, các kết nối được kiểm tra thường xuyên và bị xóa khỏi nhóm nếu không hợp lệ. –
@AndyWilkinson Tôi nghĩ rằng tôi đang sử dụng tomcat-jdbc vì pom của tôi bao gồm spring-boot-starter-jdbc. – mattm