2017-04-24 163 views
1

我正在使用Spring Boot和Liquibase为我的项目初​​始化数据库。由于新的要求,我必须在两种不同的模式之间分割我的数据库表。Spring Boot - 配置和初始化多个数据源

我已经设法使用@Primary注释为我的项目配置两个数据源,但我想知道是否有方法分别初始化两个数据库,为每个数据库创建不同的表。

目前我只能让我的主数据库使用liquibase YAML脚本,我本来

回答

1

当我设法初始化由这两个数据库使用两个Liquibase豆子。 在我的配置类,我有以下

@Bean 
@Primary 
@ConfigurationProperties("spring.datasource") 
public DataSource dataSource() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean(name = "primaryLiquibaseProperties") 
@ConfigurationProperties("liquibase-changelogs.primary.liquibase") 
public LiquibaseProperties primaryLiquibaseProperties() { 
    return new LiquibaseProperties(); 
} 

@Bean(name = "liquibase") 
public SpringLiquibase primaryLiquibase(@Qualifier("primaryLiquibaseProperties") LiquibaseProperties liquibaseProperties) { 
    SpringLiquibase primary = new SpringLiquibase(); 
    primary.setDataSource(dataSource()); 
    primary.setChangeLog(primaryLiquibaseProperties().getChangeLog()); 

    return primary; 
} 

@Bean(name = "metadata_datascource") 
@ConfigurationProperties("spring.metadata_datascource") 
public DataSource metadataDataSource() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean(name = "metadataLiquibaseProperties") 
@ConfigurationProperties("liquibase-changelogs.metadate.liquibase") 
public LiquibaseProperties metadataLiquibaseProperties() { 
    return new LiquibaseProperties(); 
} 

@Bean(name = "metadata-liquibase") 
public SpringLiquibase metadataLiquibase(@Qualifier("metadataLiquibaseProperties") LiquibaseProperties liquibaseProperties) { 
    SpringLiquibase metadata = new SpringLiquibase(); 
    metadata.setDataSource(metadataDataSource()); 
    metadata.setChangeLog(metadataLiquibaseProperties().getChangeLog()); 

    return metadata; 
} 

和我的财产,我有:

spring: 
    datasource: 
    driver-class-name: org.postgresql.Driver 
    url: ... 
    username: abc 
    password: abc 
    jpa: 
     hibernate: 
     ddl-auto: update 
    metadata_datascource: 
    driver-class-name: org.postgresql.Driver 
    url: ... 
    username: abc 
    password: abc 
    jpa: 
     hibernate: 
     ddl-auto: update 

liquibase-changelogs: 
    primary: 
    liquibase: 
     change-log: classpath:db/changelog/primary.yaml 
    metadata: 
    liquibase: 
     change-log: classpath:db/changelog/metadata.yaml 
1

是,多个数据源或任何类型的bean可以在Spring中初始化。它只是需要确保春季是能够识别自动装配该实例,其中,所以基本上

  1. 用Bean的ID
  2. 使用@Qualifier自动装配
+0

很抱歉,但这个不回答我关于初始化的问题。正如我上面写的,我可以配置这两个数据源,但我不能让liquibase使用Liquibase来初始化它们。 除非你建议使用不同数据源的两个liquibase bean。如果是这样的话,你能举一个例子来说明如何做到这一点吗? – mariosk89

相关问题