Home > other >  Unable to create retry-able datasource for spring boot jdbc
Unable to create retry-able datasource for spring boot jdbc

Time:06-14

I would like to add the retry feature for database connection certain number of times until the app acquires it. For the I have used the spring-retry on the DataSource but it is not working. It is throwing the following error

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jdbcTemplate' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/JdbcTemplateConfiguration.class]: Unsatisfied dependency expressed through method 'jdbcTemplate' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: ExistingValue must be an instance of com.zaxxer.hikari.HikariDataSource

I have seen the debug logs but those are not helpful. Here is the sample source code . kindly help

Note: the dependencies mentioned in build.gradle is required for my app. I have only extracted the retry part.

CodePudding user response:

Your use-case is delaying the start of Spring Boot until your database is up. Spring actually ships with a component that does that. The DatabaseStartupValidator is that component and has existed since about Spring 1.x.

You can add it as a bean and it will wait for further bootstrapping until the database is up.

@Bean
public DatabaseStartupValidator databaseStartupValidator(DataSource dataSource) {
    var dsv = new DatabaseStartupValidator();
    dsv.setDataSource(dataSource);
    return dsv;
}

For a more detailed explanation see this blog post of mine.

  • Related