繁体   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