Mih*_*tin 5 java module liquibase spring-boot
我有一个外部 SpringBoot 公共库(构建为 )jar和一个包含它的主项目。
外部库需要一组默认数据库表。为此,我设置了 Liquibase。主要项目还使用了 Liquibase。这两个项目都有不同的变更日志文件。假设一个被命名library.xml,另一个被命名main.xml。所有数据库和 Liquibase 属性均在主项目(以及spring.liquibase.change-log=main.xml)中配置。
该库有一个属性:spring.liquibase.change-log=library.xml。
我如何告诉 Liquibase“同时运行library.xml并且main.xml”?我想我需要在库项目中配置一些东西,因为主应用程序应该按原样使用它(只需导入和使用它)。
要合并/构建我们的(liquibase)更改日志,我们可以:
include  “属性”(等)。@Bean SpringLiquibases:
(主要项目)application.properties:
spring.liquibase.change-log=classpath:/main.xml
# many more with same prefix ...
lib.liquibase.change-log=classpath:/library.xml
# according for lib.liquibase.* ...
主/配置类:
@SpringBootApplication(/* scanBasePackages = "com.example.lib" */)
// We need/want these:
@EnableConfigurationProperties(LiquibaseProperties.class)
public class Demo {
  @Bean // "main" liquibase: 
  // when order matters: @DependsOn("liquibaseLib") 
  @ConfigurationProperties("spring.liquibase") // !
  public SpringLiquibase liquibase( 
      ObjectProvider<DataSource> dataSource,
      @LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource,
      LiquibaseProperties properties) {
    return liqui(dataSource, liquibaseDataSource, properties);
  }
  @Bean // lib liquibase:
  @ConfigurationProperties("lib.liquibase")
  public SpringLiquibase liquibaseLib(
      ObjectProvider<DataSource> dataSource,
      /* alternatively: @MyVeryCustomDataSource ... */
      @LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource,
      LiquibaseProperties properties) {
    return liqui(dataSource, liquibaseDataSource, properties);
  }
  // pstvm...
  private SpringLiquibase liqui(ObjectProvider<DataSource> dataSource,
      ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties) {
    // trick: Don't use LiquibaseConfiguration as `@Configuration/Bean`
    // , it is not "repeatable" (in regards of liquibase execution;(
    // , but rather as a "utility object"/factory:
    LiquibaseConfiguration helpr = new LiquibaseConfiguration(properties);
    return helpr.liquibase(dataSource, liquibaseDataSource);
  }
}
Demo.java 的标头(包+导入):
package com.example.app;import javax.sql.DataSource; import liquibase.integration.spring.SpringLiquibase; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration.LiquibaseConfiguration; import org.springframework.boot.autoconfigure.liquibase.LiquibaseDataSource; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.DependsOn;
...如2所示:
Run Code Online (Sandbox Code Playgroud)@SpringBootApplication(/* scanBasePackages = "com.example.lib" */) // We need/want these: @EnableConfigurationProperties(LiquibaseProperties.class) public class Demo { @Bean // "main" liquibase: // when order matters: @DependsOn("liquibaseLib") @ConfigurationProperties("spring.liquibase") // ! public SpringLiquibase liquibase( ObjectProvider<DataSource> dataSource, @LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties) { return liqui(dataSource, liquibaseDataSource, properties); } @Bean // lib liquibase: @ConfigurationProperties("lib.liquibase") public SpringLiquibase liquibaseLib( ObjectProvider<DataSource> dataSource, /* alternatively: @MyVeryCustomDataSource ... */ @LiquibaseDataSource ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties) { return liqui(dataSource, liquibaseDataSource, properties); } // pstvm... private SpringLiquibase liqui(ObjectProvider<DataSource> dataSource, ObjectProvider<DataSource> liquibaseDataSource, LiquibaseProperties properties) { // trick: Don't use LiquibaseConfiguration as `@Configuration/Bean` // , it is not "repeatable" (in regards of liquibase execution;( // , but rather as a "utility object"/factory: LiquibaseConfiguration helpr = new LiquibaseConfiguration(properties); return helpr.liquibase(dataSource, liquibaseDataSource); } }
关于:
图书馆有一个单一的财产...
我希望这是一个测试属性;)!
| 归档时间: | 
 | 
| 查看次数: | 1139 次 | 
| 最近记录: |