Tôi có ứng dụng khởi động mùa xuân sử dụng 2 cơ sở dữ liệu. Tôi đã xác định 2 cấu hình cung cấp các nguồn dữ liệu được chỉ định. Tôi muốn có các nguồn dữ liệu được quản lý riêng biệt bởi liquibase. Tôi đã định nghĩa 2 tệp thay đổi riêng biệt.Nhiều cấu hình liquibase trong khởi động mùa xuân
Vấn đề là tôi không thể xác định 2 hạt riêng biệt cho liquibase.
Dưới đây là các lớp cấu hình của tôi:
...
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) {
...
}
...
}
Và thuộc tính:
cca:
liquibase:
change-log: classpath:config/liquibase/cca/master.xml
ccs:
liquibase:
change-log: classpath:config/liquibase/ccs/master.xml
Với cấu hình này tôi bị lỗi sau khi đang chạy 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.
Vì vậy, là nó có thể thế nào để xác định nhiều bean lỏng cho các nguồn dữ liệu khác nhau?
Hóa ra là bean đầu tiên phải có tên "liiquibase" và tên thứ hai có thể có bất kỳ tên nào khác. Và nó hoạt động! –