Java 多数据库连接重用实体映射
在这种情况下,我们连接到不同的数据库环境,但每个环境中的表都是相同的 是否有任何方法可以为每个环境重用实体类 我为每个环境使用单独的配置类。下面是其中一个环境的配置,类似地,我还有4个环境。“包”推断要连接到哪个环境Java 多数据库连接重用实体映射,java,spring-boot,hibernate,spring-data-jpa,multiple-databases,Java,Spring Boot,Hibernate,Spring Data Jpa,Multiple Databases,在这种情况下,我们连接到不同的数据库环境,但每个环境中的表都是相同的 是否有任何方法可以为每个环境重用实体类 我为每个环境使用单独的配置类。下面是其中一个环境的配置,类似地,我还有4个环境。“包”推断要连接到哪个环境 codejava @Configuration @EnableJpaRepositories(basePackages = {"packages"}, entityManagerFactoryRef = "OneEntityManage
code
java
@Configuration
@EnableJpaRepositories(basePackages = {"packages"},
entityManagerFactoryRef = "OneEntityManager",
transactionManagerRef = "OneTransactionManager")
public class DevDataSourceConfig {
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean OneEntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(OneDataSource());
em.setPackagesToScan(String[]{"packages"});
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource OneDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverclass);
dataSource.setUrl(url);
dataSource.setUsername(uName);
dataSource.setPassword(dbPass);
return dataSource;
}
@Primary
@Bean
public PlatformTransactionManager OneTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(OneEntityManager().getObject());
return transactionManager;
}
}
@配置
@EnableJpaRepositories(basePackages={“packages”},
entityManagerFactoryRef=“OneEntityManager”,
transactionManagerRef=“OneTransactionManager”)
公共类DevDataSourceConfig{
@豆子
@初级的
public LocalContainerEntityManagerFactoryBean OneEntityManager(){
LocalContainerEntityManagerFactoryBean em=新的LocalContainerEntityManagerFactoryBean();
em.setDataSource(OneDataSource());
em.setPackagesToScan(字符串[]{“packages”});
HibernateJavaEndorapter vendorAdapter=新的HibernateJavaEndorapter();
em.setjpavendor适配器(供应商适配器);
HashMap属性=新建HashMap();
properties.put(“hibernate.hbm2ddl.auto”,env.getProperty(“hibernate.hbm2ddl.auto”);
properties.put(“hibernate.dial”,env.getProperty(“hibernate.dial”);
em.setJpaPropertyMap(属性);
返回em;
}
@初级的
@豆子
公共数据源OneDataSource(){
DriverManager数据源dataSource=新的DriverManager数据源();
setDriverClassName(DriverClassName);
setUrl(url);
dataSource.setUsername(uName);
setPassword(dbPass);
返回数据源;
}
@初级的
@豆子
公共平台TransactionManager OneTransactionManager(){
JpaTransactionManager transactionManager=新的JpaTransactionManager();
transactionManager.SetEntityManager工厂(OneEntityManager().getObject());
返回事务管理器;
}
}
yes-在多租户上搜索-可能是一个好的开始。如果您的实体中没有定义任何特定于数据库的内容(如本机查询或表/列名等),则可以将它们用于所有数据库系统。无论是使用不同模式的相同数据库系统,还是完全不同的数据库系统,都是一样的。注意事务处理和关系。特别是(在@juwil所说的基础上),您需要将@transaction(transactionManager=…)
与声明性transactions@AndrewS,对于租户,我是否仍然能够使用实体和存储库?@Ace-yes-唯一的区别是连接指向的位置(这取决于承租人)。