spring-boottomcat-jdbc

What is the cause of "RecoverableDataAccessException" received when checking health of database?


I am using spring-boot along with oracle database.

On accessing http://localhost:8888/health health end-point, I get following response:

{"status":"DOWN","error":"org.springframework.dao.RecoverableDataAccessException: ConnectionCallback; SQL []; Closed Connection; nested exception is java.sql.SQLRecoverableException: Closed Connection"}

While searching for the above issue details, I found this link https://github.com/spring-projects/spring-boot/issues/1303. It describes the issue in detail but it has very brief mention the resolution part.

As we can see at the above mentioned source that it is an issue in new state. Once I observed that even though this exception was returned in response, application continued to insert records into database.

How can we resolve above exception and what are its impacts on the boot application which is running?


Solution

  • You need to configure the Tomcat JDBC connection pool to test connections. This should prevent the DB health indicator from being left stuck with a broken connection.

    You can do so by adding some configuration to application.properties. For example:

    spring.datasource.test-on-borrow: true
    spring.datasource.validation-query: SELECT 1 FROM DUAL
    spring.datasource.log-validation-errors: true