2017-04-24 53 views
1

私はSpringブートとLiquibaseを使って自分のプロジェクトのデータベースを初期化しています。新しい要件のために、私はデータベーステーブルを2つの異なるスキーマに分割する必要があります。Springブート - 複数のデータソースの設定と初期化

@Primaryアノテーションを使用してプロジェクトの両方のデータソースを設定することができましたが、2つのデータベースを別々に初期化してデータベースごとに異なるテーブルを作成する方法があるのだろうかと思います。私は私のプライマリ・データベースは、私はもともと

答えて

1

をオートワイヤリング

  • 2つのLiquibase Beanを使用しています。私は

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

    と私は私のプロパティで、次のしている私のConfigurationクラスで :

    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のいずれかのタイプが春内で可能であるがあったLiquiBaseをYAMLスクリプトを使用して初期化することができます現時点では

    。春はとても基本的に、どこautowireするためにどのインスタンスを識別することができることを確認する必要があるだけである

    1. 使用ビーンID私がすることにより、両方のデータベースを初期化するために管理し、使用@Qualifier
    +0

    申し訳ありませんが、これは初期化についての私の質問に答えていません。上記で書いたように、私は2つのデータソースを設定することができますが、Liquibaseを使用して両方を初期化することはできません。 異なるデータソースを使用する2つのliquibase beanを提案している場合を除きます。そのような場合は、これを行う方法の例を挙げることができますか? – mariosk89

    関連する問題