Tengo una aplicación Spring Boot que usa 2 bases de datos. Definí 2 configuraciones proporcionando fuentes de datos específicas. Quiero que liquibase administre esas fuentes de datos por separado. Definí 2 archivos de registro de cambios separados.
El problema es que no puedo definir 2 beans separados para liquibase.
Aquí están mis clases de configuración:
... 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) { ... } ... }Y propiedades:
cca: liquibase: change-log: classpath:config/liquibase/cca/master.xml ccs: liquibase: change-log: classpath:config/liquibase/ccs/master.xmlCon esta configuración, aparece el siguiente error al ejecutar la aplicación:
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] osboot.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] osbdLoggingFailureAnalysisReporter : *************************** 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.Entonces, ¿es posible definir múltiples beans liquibase para diferentes fuentes de datos?
hay dos opciones:
define un bean llamado liquibase para permitir que el proceso integrado Spring-Boot actualice su esquema en su primer DS. Tienes que manejar el segundo a mano.
deshabilita la actualización automática de liquibase al inicio con
habilitado: falso
y defina su camino DS y liquibase beans para actualizar sus dos bases de datos