sql >> データベース >  >> RDS >> PostgreSQL

SpringBoot-異なるデータベースの同じリポジトリと同じエンティティ

    異なるデータソースで2つの構成ファイルを作成します。これらの2つの構成ファイルは、2つの異なるjpaリポジトリクラスに対して異なる仕様になりますが、同じドメインクラスを持つことができます。

    step1>プロパティファイルに2つのデータソースの詳細があります。

    spring.datasource.url=jdbc:postgresql://localhost:5432/DB2017_test
    spring.datasource.username=xxx
    spring.datasource.password=xxx
    
    
    # DB2018 DB - ""
    spring.datasource2.url=jdbc:postgresql://localhost:5432/DB2018_test
    spring.datasource2.username=xxx
    spring.datasource2.password=xxx
    

    step2>次に、最初のdataSourceの構成ファイルを作成します

    package com.package1;
    
    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(
      entityManagerFactoryRef = "entityManagerFactory",
      basePackages = { "com.package1.repo" } 
    )
    public class DB2017Config {
    
      @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.domain")
          .persistenceUnit("foo")
          .build();
      }
    
      @Primary
      @Bean(name = "transactionManager")
      public PlatformTransactionManager transactionManager(
        @Qualifier("entityManagerFactory") EntityManagerFactory 
        entityManagerFactory
      ) {
        return new JpaTransactionManager(entityManagerFactory);
      }
    }
    

    step3>同様に、他のdataSource用に別の構成ファイルを作成します。

    @EnableJpaRepositories(
      entityManagerFactoryRef = "entityManagerFactory",
      basePackages = { "com.package2.repo" }
    

    そしてプレフィックスを変更します

    @ConfigurationProperties(prefix = "spring.datasource2")
    

    これで、上記のように、package1とpackage2にそれぞれ2つの同様のRequestRepository1とRequestRepository2が作成されます(basePackages ={"com.package1.repo"})。

    step4>すべてのセットが2つの異なるリポジトリを自動配線します。

    @Autowired
    private final RequestRepository1  repo1;
    @Autowired
    private final RequestRepository2  repo2;
    

    次に、それらを使用します。

    List<Request> listAdesioni = repo1.findByCodiceFiscale(codicefiscale);
    List<Request> listAdesioni = repo2.findByCodiceFiscale(codicefiscale);
    



    1. mysqlの右テーブルの条件を使用した左結合

    2. MySQLの列数は値の数と一致しませんが、数は一致します

    3. CodeIgniter内で複数のデータベースを使用する

    4. PostgreSQLbytea列の16進数をrのint16/uint16にデコードする方法は?