`

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

 
阅读更多

1 配置文件

 

Properties代码  收藏代码
  1. wisely.primary.datasource.driverClassName=oracle.jdbc.OracleDriver  
  2. wisely.primary.datasource.url=jdbc\:oracle\:thin\:@192.168.1.103\:1521\:xe  
  3. wisely.primary.datasource.username=gis  
  4. wisely.primary.datasource.password=gis  
  5.    
  6. wisely.secondary.datasource.driverClassName=oracle.jdbc.OracleDriver  
  7. wisely.secondary.datasource.url=jdbc\:oracle\:thin\:@192.168.1.103\:1522\:xe  
  8. wisely.secondary.datasource.username=gis  
  9. wisely.secondary.datasource.password=gis  

 

 

 

2 datasource配置

 

第一个数据源

 

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

 

 

 

第二个数据源

 

Java代码  收藏代码
  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 实体管理器及事务管理器配置

 

第一个数据源

 

Java代码  收藏代码
  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.   
  8.       @Autowired @Qualifier("primaryDS")  
  9.       private DataSource primaryDS;  
  10.   
  11.       @Bean(name = "entityManagerPrimary")  
  12.       @Primary  
  13.       public EntityManager entityManager(EntityManagerFactoryBuilder builder) {  
  14.           return entityManagerFactoryPrimary(builder).getObject().createEntityManager();  
  15.       }  
  16.   
  17.       @Bean(name = "entityManagerFactoryPrimary")  
  18.       @Primary  
  19.       public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {  
  20.           return builder  
  21.                   .dataSource(primaryDS)  
  22.                   .properties(getVendorProperties(primaryDS))  
  23.                   .packages("com.wisely.demo.domain.one"//设置实体类所在位置  
  24.                   .persistenceUnit("primaryPersistenceUnit")  
  25.                   .build();  
  26.       }  
  27.   
  28.       private Map<String, String> getVendorProperties(DataSource dataSource) {  
  29.           return jpaProperties.getHibernateProperties(dataSource);  
  30.       }  
  31.   
  32.       @Bean(name = "transactionManagerPrimary")  
  33.       @Primary  
  34.       PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {  
  35.           return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());  
  36.       }  
  37.   
  38. }  

 

 

 

第二个数据源

 

Java代码  收藏代码
  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.   
  8.       @Autowired @Qualifier("secondaryDS")  
  9.       private DataSource secondaryDS;  
  10.   
  11.       @Bean(name = "entityManagerSecondary")  
  12.       public EntityManager entityManager(EntityManagerFactoryBuilder builder) {  
  13.           return entityManagerFactorySecondary(builder).getObject().createEntityManager();  
  14.       }  
  15.   
  16.       @Bean(name = "entityManagerFactorySecondary")  
  17.       public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {  
  18.           return builder  
  19.                   .dataSource(secondaryDS)  
  20.                   .properties(getVendorProperties(secondaryDS))  
  21.                   .packages("com.wisely.demo.domain.two")  
  22.                   .persistenceUnit("secondaryPersistenceUnit")  
  23.                   .build();  
  24.       }  
  25.   
  26.       private Map<String, String> getVendorProperties(DataSource dataSource) {  
  27.           return jpaProperties.getHibernateProperties(dataSource);  
  28.       }  
  29.   
  30.       @Bean(name = "transactionManagerSecondary")  
  31.       PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {  
  32.           return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());  
  33.       }  
  34.   
  35. }  

 

 

 

4 使用

 

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

 

 

 

Java代码  收藏代码
  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. }  

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics