2017-04-11 7 views
5

Ich habe Spring Boot-Anwendung, die 2 Datenbanken verwenden. Ich habe 2 Konfigurationen definiert, die spezifizierte Datenquellen bereitstellen. Ich möchte, dass diese Datenquellen von liquibase getrennt verwaltet werden. Ich habe 2 getrennte Changelog-Dateien definiert.Mehrere liquibase Konfigurationen in Spring Boot

Das Problem ist, dass ich 2 separate Bohnen für Liquibase nicht definieren kann.

Hier meine Config-Klassen sind:

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

und Eigenschaften:

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

Mit dieser Konfiguration i Fehler erhalten folgende während appliction ausgeführt wird:

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 ist es möglich, Definieren mehrerer liquibase-Beans für verschiedene Datenquellen?

Antwort

2

gibt es zwei Möglichkeiten:

  1. Sie definieren eine Bean mit dem Namen liquibase feder Boot integriert Prozess zu lassen Ihr Schema auf Sie erste DS zu aktualisieren. Sie haben die zweite von Hand

  2. Sie liquibase automatische Aktualisierung beim Start mit

aktiviert deaktivieren zu handhaben: false

und definieren Sie Ihren Weg DS und liquibase Bohnen zu aktualisieren Ihre beiden Datenbanken

+1

Es stellte sich heraus, dass die erste Bean muss den Namen "Liiquibase" und die zweite kann einen anderen Namen haben.Und es funktioniert! –

Verwandte Themen