我使用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。 业务逻辑应该确定应该在运行时使用哪个模式。
这样做的最佳方法是什么?
答案 0 :(得分:0)
我找到了我正在寻找的内容,它扩展了 AbstractRoutingDataSource 类,并覆盖了 determineCurrentLookupKey ()方法