2017-04-11 25 views
5

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?

Trả lời

2

có hai tùy chọn:

  1. bạn xác định một bean tên liquibase để cho mùa xuân-khởi động quá trình tích hợp để cập nhật sơ đồ của bạn trên bạn DS đầu tiên. Bạn phải xử lý một giây bằng tay

  2. bạn vô hiệu hóa liquibase cập nhật tự động lúc khởi động với

kích hoạt: false

và xác định DS theo cách của bạn và đậu liquibase để cập nhật hai cơ sở dữ liệu của bạn

+1

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! –

Các vấn đề liên quan