簡體   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