繁体   English   中英

Spring Boot:在同一程序包中配置两个数据源

[英]Spring boot : Configure Two DataSources in the same package

我想为我的spring boot项目配置两个数据源,但是在两个数据库中我有相同的实体,所以我问是否有可能将这些实体放在一个包中并在存储库中初始化特定的数据源。

这是我的配置:

@Configuration
@EnableAutoConfiguration
public class NwlConfiguration {

    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties source1DataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "source1")
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSource source1DataSource() {
        return source1DataSourceProperties().initializeDataSourceBuilder().build();
    }

    @Bean
    @ConfigurationProperties("source2.datasource")
    public DataSourceProperties source2DataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "source2")
    @ConfigurationProperties("source2.datasource")
    public DataSource source2DataSource() {
        return source2DataSourceProperties().initializeDataSourceBuilder().build();
    }

}

您的配置看起来正常。 唯一的事情是您需要分配哪个配置将用于哪个存储库。

如果有多个实体,可以将它们放在一个公共包中。

像这样

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "barEntityManagerFactory",
    transactionManagerRef = "barTransactionManager", basePackages = {"com.foobar.bar.repo"})
public class BarDbConfig {

完整的代码

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "barEntityManagerFactory",
    transactionManagerRef = "barTransactionManager", basePackages = {"com.foobar.bar.repo"})
public class BarDbConfig {

  @Bean(name = "barDataSource")
  @ConfigurationProperties(prefix = "bar.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "barEntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean barEntityManagerFactory(
      EntityManagerFactoryBuilder builder, @Qualifier("barDataSource") DataSource dataSource) {
    return builder.dataSource(dataSource).packages("com.foobar.bar.domain").persistenceUnit("bar")
        .build();
  }

  @Bean(name = "barTransactionManager")
  public PlatformTransactionManager barTransactionManager(
      @Qualifier("barEntityManagerFactory") EntityManagerFactory barEntityManagerFactory) {
    return new JpaTransactionManager(barEntityManagerFactory);
  }

}

第二个数据源配置类

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
    basePackages = {"com.foobar.foo.repo"})
public class FooDbConfig {

  @Primary
  @Bean(name = "dataSource")
  @ConfigurationProperties(prefix = "spring.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

  @Primary
  @Bean(name = "entityManagerFactory")
  public LocalContainerEntityManagerFactoryBean entityManagerFactory(
      EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource) {
    return builder.dataSource(dataSource).packages("com.foobar.foo.domain").persistenceUnit("foo")
        .build();
  }

  @Primary
  @Bean(name = "transactionManager")
  public PlatformTransactionManager transactionManager(
      @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
  }
}

请参阅本文以获取更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM