具有JPA和Spring的特定实体的可更改模式

时间:2017-06-25 15:00:15

标签: java spring spring-data-jpa

我使用Spring和JPA存储库,为不同的实体使用多个数据库模式,并使用适当的值和独立的bean配置它们:

@Configuration
@EnableJpaRepositories(basePackageClasses = {ClassFromSchemaXRepository.class}, entityManagerFactoryRef = "ClassFromSchemaXEntityManagerFactoryA", transactionManagerRef = "ClassFromSchemaXTransactionManager")
{
    @Bean
    public DataSource classFromSchemaXDataSource(){
       HikariDataSource hds = new HikariDataSource();
       hds.setJdbcUrl(env.getProperty("dataSource.jdbcUrl.schema.x"));
       hds.setUsername(env.getProperty("dataSource.user"));
       hds.setPassword(env.getProperty("dataSource.password"));
        //...
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean classFromSchemaXEntityManagerFactory() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(classFromSchemaXDataSource());
        em.setPackagesToScan(new String[] { "com.company.core.domain.x" });
        //...
    }

    @Bean
    public PlatformTransactionManager classFromSchemaXTransactionManager() {
        //...
    }

}

此配置按预期工作,位于' com.company.core.domain.x' 包下的整个实体集将映射到此组具有模式连接字符串的bean,该字符串在 env.getProperty(" dataSource.jdbcUrl.schema.x")中定义

但是,我现在正在尝试配置一个特定的实体以供可更改的模式使用,因此需要使用dymanic DataSource / EntityManagerFactory / TransactionManager。 业务逻辑应该确定应该在运行时使用哪个模式。

这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我找到了我正在寻找的内容,它扩展了 AbstractRoutingDataSource 类,并覆盖了 determineCurrentLookupKey ()方法