PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Spring Boot - Едно и също хранилище и един и същ обект за различни бази данни

Създайте 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>След това създайте конфигурационен файл за първия източник на данни

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);
  }
}

стъпка3> По подобен начин създайте друг конфигурационен файл за друг източник на данни,

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

И променете префикса

@ConfigurationProperties(prefix = "spring.datasource2")

Сега ще имате 2 подобни RequestRepository1 и RequestRepository2 в package1 и package2 съответно, както е споменато по-горе (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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres INTERVAL използва стойност от таблицата

  2. поддържа ли rails postgres адаптер ssl?

  3. Задействане за изтриване на редове от свързани таблици преди изтриване на редове от действителната таблица

  4. Най-добри практики за сигурност на PostgreSQL

  5. Mac psql/readline - Библиотеката не е заредена