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";
      } 
    }
  • 相关阅读:
    [Redis知识体系] 一文全面总结Redis知识体系
    MySQL数据导入到ClickHouse
    docker本地搭建clickhouse
    【linux】修改宝塔默认的PHP CLI版本
    windows 10 安装go环境
    docker安装centos8
    Bootstrap 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
    C#调用WebService
    登录时,记住用户的帐号密码
    asp.net,cookie,写cookie,取cookie
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696541.html
Copyright © 2011-2022 走看看