Multiple liquibase configurations in spring boot

匿名 (未验证) 提交于 2019-12-03 01:38:01

问题:

I have spring boot application which use 2 databases. I defined 2 configurations providing specified datasources. I want to have that datasources managed separately by liquibase. I defined 2 separated changelog files.

The problem is that I can't define 2 separate beans for liquibase.

Here are my config classes:

... public class CCSConfiguration {     ...      @Bean     @ConfigurationProperties("ccs.liquibase")     public LiquibaseProperties ccsLiquibaseProperties() {         return new LiquibaseProperties();     }      @Bean     public SpringLiquibase ccsLiquibase(LiquibaseProperties liquibaseProperties) {         ...     }     ... }    ... public class CCAConfiguration {     ...     @ConfigurationProperties("cca.liquibase")     public LiquibaseProperties ccaLiquibaseProperties() {         return new LiquibaseProperties();     }      @Bean     public SpringLiquibase ccaLiquibase(LiquibaseProperties liquibaseProperties) {         ...     }     ... } 

And properties:

cca:     liquibase:         change-log: classpath:config/liquibase/cca/master.xml ccs:     liquibase:         change-log: classpath:config/liquibase/ccs/master.xml 

With this config i get following error while running appliction:

2017-04-11 14:26:55.664  WARN 34292 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'liquibase' available 2017-04-11 14:26:55.711  WARN 34292 --- [  restartedMain] o.s.boot.SpringApplication               : Error handling failed (Error creating bean with name 'delegatingApplicationListener' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.config.internalCacheAdvisor' defined in class path resource [org/springframework/cache/annotation/ProxyCachingConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cache.interceptor.BeanFactoryCacheOperationSourceAdvisor]: Factory method 'cacheAdvisor' threw exception; nested exception is java.lang.NullPointerException) 2017-04-11 14:26:55.939 ERROR 34292 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   :   *************************** APPLICATION FAILED TO START ***************************  Description:  A component required a bean named 'liquibase' that could not be found.   Action:  Consider defining a bean named 'liquibase' in your configuration. 

So, is it possible to define multiple liquibase beans for different datasources?

回答1:

there are two options:

  1. you define a bean named liquibase to let spring-boot integrated process to update your schema on you first DS. You have to handle the second one by hand

  2. you disable liquibase automatic update at startup with

enabled: false

and define your way DS and liquibase beans to update your two databases



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!