zoukankan      html  css  js  c++  java
  • Spring Boot,Spring Data 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配置

    第一个数据源

    @Configuration
    public class DataSourcePrimaryConfig {
    
      @Bean(name = "primaryDS") @Qualifier("primaryDS")
      @Primary
      @ConfigurationProperties(prefix="wisely.primary.datasource")
      public DataSource primaryDataSource(){
        return DataSourceBuilder.create().build();
      }
    
    }

    第二个数据源

    @Configuration
    public class DataSourceSecondaryConfig {
      @Bean(name = "secondaryDS") @Qualifier("secondaryDS")
      @ConfigurationProperties(prefix="wisely.secondary.datasource")
      public DataSource secondaryDataSource(){
        return DataSourceBuilder.create().build();
      }
    }

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

    第一个数据源

    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",transactionManagerRef="transactionManagerPrimary",basePackages= { "com.wisely.demo.dao.one" })//设置dao(repo)所在位置
    public class RepositoryPrimaryConfig {
        @Autowired
        private JpaProperties jpaProperties;
    
        @Autowired @Qualifier("primaryDS")
        private DataSource primaryDS;
    
        @Bean(name = "entityManagerPrimary")
        @Primary
        public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
            return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
        }
    
        @Bean(name = "entityManagerFactoryPrimary")
        @Primary
        public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
            return builder
                    .dataSource(primaryDS)
                    .properties(getVendorProperties(primaryDS))
                    .packages("com.wisely.demo.domain.one") //设置实体类所在位置
                    .persistenceUnit("primaryPersistenceUnit")
                    .build();
        }
    
        private Map<String, String> getVendorProperties(DataSource dataSource) {
            return jpaProperties.getHibernateProperties(dataSource);
        }
    
        @Bean(name = "transactionManagerPrimary")
        @Primary
        PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
            return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
        }
    
    }

    第二个数据源

    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",transactionManagerRef="transactionManagerSecondary",basePackages= { "com.wisely.demo.dao.two" })
    public class RepositorySecondaryConfig {
        @Autowired
        private JpaProperties jpaProperties;
    
        @Autowired @Qualifier("secondaryDS")
        private DataSource secondaryDS;
    
        @Bean(name = "entityManagerSecondary")
        public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
            return entityManagerFactorySecondary(builder).getObject().createEntityManager();
        }
    
        @Bean(name = "entityManagerFactorySecondary")
        public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {
            return builder
                    .dataSource(secondaryDS)
                    .properties(getVendorProperties(secondaryDS))
                    .packages("com.wisely.demo.domain.two")
                    .persistenceUnit("secondaryPersistenceUnit")
                    .build();
        }
    
        private Map<String, String> getVendorProperties(DataSource dataSource) {
            return jpaProperties.getHibernateProperties(dataSource);
        }
    
        @Bean(name = "transactionManagerSecondary")
        PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
            return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
        }
    
    }

    4 使用

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

    @Controller
    public class TestController {
      @Autowired
      SysRoleRepo1 sysRoleRepo1;
      @Autowired
      SysRoleRepo2 sysRoleRepo2;
      @RequestMapping("/test")
      public @ResponseBody String test(){
        System.out.println(Lists.newArrayList(sysRoleRepo1.findAll()).size());
        System.out.println(Lists.newArrayList(sysRoleRepo2.findAll()).size());
        return "ok";
      } 
    }
  • 相关阅读:
    什么是仿射变换
    转:vim比较好的学习资料
    学好C++的五十条建议
    转:美国设置地理系的大学名单
    转:windows下安装emacs
    我学习GNU/Linux: 如何上手
    Linux学习路线图 (转载)
    unix编程学习路线图(转)
    转:C++资源之不完全导引
    Why Linux Programming?
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696540.html
Copyright © 2011-2022 走看看