簡體   English   中英

Spring Boot,具有多個 Hikari 數據源和單個數據源配置 Java 文件的 Spring Data JPA

[英]Spring Boot, Spring Data JPA with Multiple Hikari DataSources and Single Data source Configuration Java File

如何創建具有 application.properties 中提到的多個數據源配置的單個配置 java 文件,以便同時添加任意“n”個數據源。 它必須使用相同的配置文件自動處理所有數據源。

此外,所有數據源必須使用相同的 JPARepository 來查詢數據。 此外,我想創建一個實體管理器列表來對特定數據源執行特定操作。

應用程序屬性

site1.url=jdbc:postgresql://localhost:4567/postgres
site1.username=someUsername
site1.password=somePassword

site2.url=jdbc:postgresql://localhost:5433/postgres
site2.username=someUsername
site2.password=somePassword

站點配置文件

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "site1EntityManager",
        transactionManagerRef = "site1TransactionManager",
        basePackages = "com.someProject.repositoryInterface"
)
public class Site1Config extends HikariConfig {

    @Autowired
    private Environment environment;

    @Primary
    @Bean(name = "site1EntityManager")
    public HikariDataSource mysqlDataSource() {
        setJdbcUrl(environment.getProperty("site1.url"));
        setUsername(environment.getProperty("site1.username"));
        setPassword(environment.getProperty("site1.password"));

        return new HikariDataSource(this);
    }

    @Primary
    @Bean(name = "site1EntityManager")
    public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(mysqlDataSource())
                .packages(ModelClass.class)
                .persistenceUnit("site1PU")
                .build();
    }

    @Primary
    @Bean(name = "site1TransactionManager")
    public PlatformTransactionManager mysqlTransactionManager(@Qualifier("site1EntityManager") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

這是單數據源配置文件的基本示例。 我想將 SiteConfiguration 作為“站點(編號)”形式的通用類,並為每個案例創建一個單獨的數據源和實體管理器。

它應該自動從 application.properites 中獲取數據源的數量,並且應該配置在屬性文件中提到的所有數據源。

此外,每個數據源都必須使用相同的 JPARepository。

據我了解,您需要根據您在application.properties 中聲明的站點數量創建“N”個數據源。 我看到的唯一方法是您的DataSource bean應該動態創建,而不是靜態綁定到您的 application.properties。

在 Spring 中有一種方法是結合使用“ConfigurableBeanFactory”和“BeanFactoryAware”。

在 StackOverflow 中已經有一個答案:這里

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM