PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Spring Boot - To samo repozytorium i ta sama jednostka dla różnych baz danych

Utwórz 2 pliki konfiguracyjne z różnymi źródłami danych, a te 2 pliki konfiguracyjne będą miały różne specyfikacje dla 2 różnych klas repozytorium jpa. Ale mogą mieć tę samą klasę domeny.

step1>W pliku właściwości znajdują się 2 szczegóły źródła danych.

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>Następnie utwórz plik konfiguracyjny dla pierwszego źródła danych

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> W podobny sposób utwórz kolejny plik konfiguracyjny dla innego źródła danych,

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

I zmień prefiks

@ConfigurationProperties(prefix = "spring.datasource2")

Teraz będziesz mieć 2 podobne RequestRepository1 i RequestRepository2 odpowiednio w pakiecie 1 i pakiecie 2, jak wspomniano powyżej (basePackages ={ "com.package1.repo" }).

step4>Wszystkie ustawione autowire 2 różne repozytorium.

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

Następnie użyj ich.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak eksportować pliki pełnotekstowe za pomocą SQL?

  2. Jaki jest najczystszy sposób na sprawdzenie aktualnego czasu lokalnego w Postgresie?

  3. Dlaczego typ danych char jest automatycznie konwertowany na bpchar?

  4. Wyszukiwanie jsonb Postgres w tablicy z większym operatorem (z jsonb_array_elements)

  5. Złożony klucz podstawowy w django