弹簧启动时的多个liquibase配置

问题描述:

我有使用2个数据库的spring启动应用程序。我定义了2个提供指定数据源的配置。我想要有由liquibase单独管理的数据源。我定义了2个独立的更新日志文件。弹簧启动时的多个liquibase配置

问题是我无法为liquibase定义2个独立的bean。

这里是我的配置类:

... 
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) { 
     ... 
    } 
    ... 
} 

和属性:

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

有了这个配置,同时运行机应用我得到以下错误:

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. 

那么,有没有可能为不同的数据源定义多个liquibase bean?

有两种选择:

  1. 你定义一个bean命名liquibase让春天启动整合过程中你第一次DS更新架构。你必须处理手动第二个

  2. 禁用liquibase自动更新在启动时

启用:假

,并确定自己的方式DS和liquibase豆更新你的两个数据库

+1

原来,第一个bean必须有名称“liiquibase”,第二个可以有任何不同的名称,它的工作原理! –