簡體   English   中英

Spring Boot-配置和初始化多個數據源

[英]Spring Boot - Configure and initialise multiple datasources

我正在使用Spring Boot和Liquibase為我的項目初​​始化數據庫。 由於新的要求,我必須在兩個不同的模式之間拆分數據庫表。

我已經使用@Primary批注為項目配置了兩個數據源,但是我想知道是否有一種方法可以分別初始化兩個數據庫,為每個數據庫創建不同的表。

目前,我只能使用最初擁有的liquibase yaml腳本來初始化主數據庫

是的,Spring中可以使用多個DataSources或任何類型的bean。 只需確保Spring能夠識別在哪個位置自動連線的實例,因此基本上

  1. 使用bean ID
  2. 自動裝配時使用@Qualifier

我設法使用兩個Liquibase bean初始化了兩個數據庫。 在我的Configuration類中,我有以下內容

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM