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";
      } 
    }
  • 相关阅读:
    成幻Online Judge 1.00 Beta 环境配置
    AJAX Control Toolkit tabs 的纯Javascript演示
    Microsoft ASP.NET Futures (July 2007)中History在客户端的使用(即不必安装ASP.NET Futures)
    HTML中利用纯Microsoft Ajax Library做出可调用WebSerives的AutoComplete
    初雪,小词一首
    vs 2008中使用Asp.net Ajax智能感知Intellisense
    IE6下Ms Ajax Lib 调用Ajaxtoolkit时Common_InvalidPaddingUnit未定义的解决方法
    由成幻OnlineJudge学习如何做自己的AcmIcpc在线评判系统-5.在线编译与测试系统代码粗解
    成幻Online Judge 1.00 源代码下载 [20070804]
    Asp.net中动态在中加入Scrpit标签
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696541.html
Copyright © 2011-2022 走看看