2017-04-24 45 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

相關問題