2017-04-24 5 views
1

Ich verwende Spring Boot und Liquibase, um eine Datenbank für mein Projekt zu initialisieren. Aufgrund neuer Anforderungen muss ich meine Datenbanktabellen auf zwei verschiedene Schemas aufteilen.Spring Boot - Konfigurieren und initialisieren Sie mehrere Datenquellen

Ich habe es geschafft, beide Datenquellen für mein Projekt mit der @ Primary Annotation zu konfigurieren, aber ich frage mich, ob es eine Möglichkeit gibt, die beiden Datenbanken separat zu initialisieren und unterschiedliche Tabellen für jede Datenbank zu erstellen.

Im Moment habe ich nur meine primäre Datenbank bekommen initialisiert die liquibase yaml Skript, das ich ursprünglich

Antwort

1

ich es geschaffen autowiring beiden Datenbanken zur Initialisierung von mit zwei Liquibase-Bohnen. In meiner Configuration-Klasse die folgend

@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; 
} 

und ich habe in meinen Eigenschaften Ich habe:

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

hatte Ja, mehrere Datasources oder jede Art von Bohne ist möglich, innerhalb von Frühling. Es ist nur notwendig, um sicherzustellen, dass Frühling der Lage ist, welche Instanz zu identifizieren, autowire wo

so im Grunde
  1. Verwendung bean id
  2. @Qualifier Verwendung bei
+0

Sorry, aber diese meine Frage nach der Initialisierung nicht beantworten. Wie ich oben schrieb, kann ich die zwei Datenquellen konfigurieren, aber ich kann Liquibase nicht erhalten, um beide mit Liquibase zu initialisieren. Es sei denn, Sie schlagen zwei liquibase-Beans vor, die verschiedene Datenquellen verwenden. Wenn das der Fall ist, könnten Sie ein Beispiel dafür geben, wie das geht? – mariosk89

Verwandte Themen