当前位置:   article > 正文

Spring Boot,Spring Data JPA多数据源支持

java 兼容多数据库 jpa

1 配置文件

wisely.primary.datasource.driverClassName=oracle.jdbc.OracleDriver
wisely.primary.datasource.url=jdbc\:oracle\:thin\:@192.168.1.103\:1521\:xe
wisely.primary.datasource.username=gis
wisely.primary.datasource.password=gis
 
wisely.secondary.datasource.driverClassName=oracle.jdbc.OracleDriver
wisely.secondary.datasource.url=jdbc\:oracle\:thin\:@192.168.1.103\:1522\:xe
wisely.secondary.datasource.username=gis
wisely.secondary.datasource.password=gis

 

2 datasource配置

第一个数据源

  1. @Configuration
  2. public class DataSourcePrimaryConfig {
  3. @Bean(name = "primaryDS") @Qualifier("primaryDS")
  4. @Primary
  5. @ConfigurationProperties(prefix="wisely.primary.datasource")
  6. public DataSource primaryDataSource(){
  7. return DataSourceBuilder.create().build();
  8. }
  9. }

 

第二个数据源

  1. @Configuration
  2. public class DataSourceSecondaryConfig {
  3. @Bean(name = "secondaryDS") @Qualifier("secondaryDS")
  4. @ConfigurationProperties(prefix="wisely.secondary.datasource")
  5. public DataSource secondaryDataSource(){
  6. return DataSourceBuilder.create().build();
  7. }
  8. }

 

3 实体管理器及事务管理器配置

第一个数据源

  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",transactionManagerRef="transactionManagerPrimary",basePackages= { "com.wisely.demo.dao.one" })//设置dao(repo)所在位置
  4. public class RepositoryPrimaryConfig {
  5. @Autowired
  6. private JpaProperties jpaProperties;
  7. @Autowired @Qualifier("primaryDS")
  8. private DataSource primaryDS;
  9. @Bean(name = "entityManagerPrimary")
  10. @Primary
  11. public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
  12. return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
  13. }
  14. @Bean(name = "entityManagerFactoryPrimary")
  15. @Primary
  16. public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
  17. return builder
  18. .dataSource(primaryDS)
  19. .properties(getVendorProperties(primaryDS))
  20. .packages("com.wisely.demo.domain.one") //设置实体类所在位置
  21. .persistenceUnit("primaryPersistenceUnit")
  22. .build();
  23. }
  24. private Map<String, String> getVendorProperties(DataSource dataSource) {
  25. return jpaProperties.getHibernateProperties(dataSource);
  26. }
  27. @Bean(name = "transactionManagerPrimary")
  28. @Primary
  29. PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
  30. return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
  31. }
  32. }

 

第二个数据源

  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",transactionManagerRef="transactionManagerSecondary",basePackages= { "com.wisely.demo.dao.two" })
  4. public class RepositorySecondaryConfig {
  5. @Autowired
  6. private JpaProperties jpaProperties;
  7. @Autowired @Qualifier("secondaryDS")
  8. private DataSource secondaryDS;
  9. @Bean(name = "entityManagerSecondary")
  10. public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
  11. return entityManagerFactorySecondary(builder).getObject().createEntityManager();
  12. }
  13. @Bean(name = "entityManagerFactorySecondary")
  14. public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {
  15. return builder
  16. .dataSource(secondaryDS)
  17. .properties(getVendorProperties(secondaryDS))
  18. .packages("com.wisely.demo.domain.two")
  19. .persistenceUnit("secondaryPersistenceUnit")
  20. .build();
  21. }
  22. private Map<String, String> getVendorProperties(DataSource dataSource) {
  23. return jpaProperties.getHibernateProperties(dataSource);
  24. }
  25. @Bean(name = "transactionManagerSecondary")
  26. PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
  27. return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
  28. }
  29. }

 

4 使用

此时来自不同数据库的dao(repo)可以任意在其它的bean里注入

 

  1. @Controller
  2. public class TestController {
  3. @Autowired
  4. SysRoleRepo1 sysRoleRepo1;
  5. @Autowired
  6. SysRoleRepo2 sysRoleRepo2;
  7. @RequestMapping("/test")
  8. public @ResponseBody String test(){
  9. System.out.println(Lists.newArrayList(sysRoleRepo1.findAll()).size());
  10. System.out.println(Lists.newArrayList(sysRoleRepo2.findAll()).size());
  11. return "ok";
  12. }
  13. }

 

 

新书推荐《JavaEE开发的颠覆者: Spring Boot实战》,涵盖Spring 4.x、Spring MVC 4.x、Spring Boot企业开发实战。

 

京东地址:http://item.jd.com/11894632.html

当当地址:http://product.dangdang.com/23926195.html

亚马逊地址:http://www.amazon.cn/图书/dp/B01D5ZBFUK/ref=zg_bsnr_663834051_6 

淘宝地址:https://item.taobao.com/item.htm?id=528426235744&ns=1&abbucket=8#detail

 

 

 

或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。

 


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号