Reputation: 11
I got this error after an upgrade to spring boot 2.6.3, I tried rolling back to old different spring boot versions but that doesn't resolve the issue. Spring boot Version : 2.6.3 Liquibase version 4.5.0
Liquibase configurations: @Configuration public class LiquibaseConfig {
@Autowired
private DataSource dataSource;
@Bean
public LiquibaseProperties liquibaseProperties() {
return new LiquibaseProperties();
}
@DependsOn("entityManagerFactory")
@Bean("liquibase")
public SpringLiquibase liquibase() {
LiquibaseProperties liquibaseProperties = liquibaseProperties();
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setChangeLog(liquibaseProperties.getChangeLog());
liquibase.setContexts(liquibaseProperties.getContexts());
liquibase.setDataSource(dataSource);
liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema());
liquibase.setDropFirst(liquibaseProperties.isDropFirst());
liquibase.setShouldRun(true);
liquibase.setLabels(liquibaseProperties.getLabels());
liquibase.setChangeLogParameters(liquibaseProperties.getParameters());
return liquibase;
}
}
Error after starting up the project:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [LiquibaseConfig.class]: Circular depends-on relationship between 'liquibase' and 'entityManagerFactory' at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:317) ~[spring-beans-5.3.16.jar:5.3.16] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.16.jar:5.3.16] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.3.16.jar:5.3.16] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.16.jar:5.3.16] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.16.jar:5.3.16] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.16.jar:5.3.16] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.16.jar:5.3.16] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.4.jar:2.6.4] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) ~[spring-boot-2.6.4.jar:2.6.4] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) ~[spring-boot-2.6.4.jar:2.6.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-2.6.4.jar:2.6.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) ~[spring-boot-2.6.4.jar:2.6.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.4.jar:2.6.4] at [package name].TestApplication.main(TestApplication.java:10) ~[classes/:na]
Upvotes: 1
Views: 2778
Reputation: 43
Follow This :
public class CustomSpringLiquibase implements InitializingBean, BeanNameAware, ResourceLoaderAware { private SpringLiquibase springLiquibase; public CustomSpringLiquibase(SpringLiquibase springLiquibase) { this.springLiquibase = springLiquibase; } @Override public void afterPropertiesSet() throws Exception { springLiquibase.afterPropertiesSet(); } @Override public void setBeanName(String s) { springLiquibase.setBeanName(s); } @Override public void setResourceLoader(ResourceLoader resourceLoader) { springLiquibase.setResourceLoader(resourceLoader); } }
@Bean @DependsOn(value = "entityManagerFactory") public CustomSpringLiquibase liquibase() { LiquibaseProperties liquibaseProperties = liquibaseProperties(); SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setChangeLog(liquibaseProperties.getChangeLog()); liquibase.setContexts(liquibaseProperties.getContexts()); liquibase.setDataSource(getDataSource(liquibaseProperties)); liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema()); liquibase.setDropFirst(liquibaseProperties.isDropFirst()); liquibase.setShouldRun(true); liquibase.setLabels(liquibaseProperties.getLabels()); liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); return new CustomSpringLiquibase(liquibase); }
Upvotes: 0
Reputation: 116321
While it isn't recommended to mix Hibernate and Liquibase's database initialization (you should really use Liquibase alone as it will make it easier to evolve your application's database schema), you can opt in to that behaviour by setting spring.jpa.defer-datasource-initialization
to true
.
Upvotes: 1