У меня есть следующая конфигурация в application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/demodb
spring.datasource.username=postgres
spring.datasource.password=password
spring.session.store-type=jdbc
spring.session.jdbc.initialize-schema=always
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=update
Я хочу корректно обработать ошибку соединения с базой данных, и приложение не должно перестать работать из-за сбоя соединения с базой данных.
Я хочу, чтобы приложение обрабатывало ошибку как во время запуска, так и после запуска.
Я получаю следующее исключение, когда моя база данных не работает:
Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:245) ~[postgresql-42.2.2.jar:42.2.2]
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.2.jar:42.2.2]
...
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_172]
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) ~[na:1.8.0_172]
...
In @ControllerAdvise, я пытался обработать ошибку после запуска, но исключение не получалось:
@ControllerAdvice
public class AppAdvise {
@ResponseBody
@ExceptionHandler(PSQLException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public AppResponse psqlExceptionHandler(PSQLException ex) {
return helpers.getResponseErrorObject(ex.getMessage());
}
@ResponseBody
@ExceptionHandler(JDBCConnectionException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public AppResponse psqlExceptionHandler(JDBCConnectionException ex) {
return helpers.getResponseErrorObject(ex.getMessage());
}
}
Как я могу обработать ошибки подключения как при запуске, так и после запуска?