Java Spring引导-配置和初始化多个数据源

Java Spring引导-配置和初始化多个数据源,java,spring,spring-boot,datasource,liquibase,Java,Spring,Spring Boot,Datasource,Liquibase,我正在使用SpringBoot和Liquibase为我的项目初始化数据库。由于新的需求,我不得不在两个不同的模式之间拆分数据库表 我已经使用@Primary注释为我的项目配置了两个数据源,但是我想知道是否有办法分别初始化这两个数据库,为每个数据库创建不同的表 目前,我只能使用我最初拥有的liquibase yaml脚本初始化我的主数据库是的,在Spring中可以使用多个数据源或任何类型的bean。只需要确保Spring能够识别要在何处自动关联的实例,所以基本上 使用bean id 自动布线时使用

我正在使用SpringBoot和Liquibase为我的项目初始化数据库。由于新的需求,我不得不在两个不同的模式之间拆分数据库表

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


目前,我只能使用我最初拥有的liquibase yaml脚本初始化我的主数据库

是的,在Spring中可以使用多个数据源或任何类型的bean。只需要确保Spring能够识别要在何处自动关联的实例,所以基本上

  • 使用bean id
  • 自动布线时使用

  • 我通过使用两个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;
    }
    
    在我的财产中,我有:

    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
    

    抱歉,这没有回答我关于初始化的问题。正如我在上面所写的,我可以配置这两个数据源,但我不能让liquibase使用liquibase初始化这两个数据源。除非你建议使用不同的数据源,使用两种液化豆子。如果是这样的话,你能举例说明如何做到这一点吗?