2

Я использую весеннее приложение для загрузки. Я выбираю данные из базы данных JDBC DataSource и репозиториев. Некоторые запросы JDBS и некоторые запросы по репозиториям. Моя БД настраивает RAC и имеет 2 экземпляра. Я подключаюсь к db на 129.0.0.2, но этот URL-адрес сбалансирован между 129.0.0.3(1 instance) and 129.0.0.4(2instance). Все запросы выполняются с 129.0.0.2, но некоторые запросы, которые мне нужно выполнить только на одном экземпляре. Я создал 3 источника данных:Как настроить репозитории JPA для разных источников данных в SpringBoot?

@Bean(name = "primary") 
    @Primary 
    @ConfigurationProperties(prefix = "spring.datasource") 
    public DataSource primaryDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean(name = "second") 
    @ConfigurationProperties(prefix = "spring.secondDatasource") 
    public DataSource secondaryDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean(name = "three") 
    @ConfigurationProperties(prefix = "spring.threeDatasource") 
    public DataSource threeDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

И сконфигурируйте их в application.properties. Тогда я могу написать

@Qualifier("primary")DataSource dataSource 

или

@Qualifier("second")DataSource dataSource 

Но что DataSource будет использовать, когда я исполняю репозиториев запрос?

ответ

1

Создать две конфигурации классов, как это:

@Configuration 
@EnableJpaRepositories(basePackages = "your.package.repositories.datasource1", 
    entityManagerFactoryRef = entityManagerFactory1) 
class DataSource1Configuration { 

    @Bean 
    public EntityManagerFactory entityManagerFactory1(@Qualifier("primary") DataSource primary) { 
    // … create entity manager factory based on primary source 
    } 
} 

Второй класс конфигурация была бы явно похожи, но адаптированные для использования вторичного источника данных

BTW, так как Java 8, он также может быть возможным, чтобы иметь два аннотаций типа (2 @EnableJpaRepositories в этом случае) на таком же классе. Таким образом, он может работать и с одним классом конфигурации, но с двумя аннотациями @EnableJpaRepositories.

+0

Можете ли вы предоставить ссылку на официальную документацию или статью, где рекомендовано это решение? или это само решение? – user5620472

+0

Я считаю, что это должно работать из того, что я знаю о Spring Data JPA. Не пробовал сам. Поскольку разговор с двумя базами данных из одного приложения Spring Boot является своего рода запахом архитектуры, я сомневаюсь, что вы найдете много ресурсов об этом. – luboskrnac

Смежные вопросы