sql >> Databáze >  >> RDS >> PostgreSQL

Spring Boot – Stejné úložiště a stejná entita pro různé databáze

Vytvořte 2 konfigurační soubory s různým zdrojem dat a tyto 2 konfigurační soubory budou mít různé specifikace pro 2 různé třídy úložiště jpa. ale mohou mít stejnou třídu domény.

step1>V souboru vlastností máte 2 podrobnosti o zdroji dat.

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>Potom vytvořte konfigurační soubor pro první 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);
  }
}

krok 3> Podobně vytvořte další konfigurační soubor pro jiný zdroj dat,

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

A změňte předponu

@ConfigurationProperties(prefix = "spring.datasource2")

Nyní budete mít 2 podobné RequestRepository1 a RequestRepository2 v package1 a package2, jak je uvedeno výše (basePackages ={ "com.package1.repo" }).

krok 4>Všechno nastaveno autowire 2 různé repo .

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

Pak je použijte.

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



  1. Chyba předání neplatných argumentů pro dag, který načítá data mysql do bigquery pomocí airflow

  2. Jak nastavit časový limit pro uloženou proceduru v SQL Server

  3. Hibernace Připojte dvě nesouvisející tabulky, když obě mají složený primární klíč

  4. Dynamický běh celkem