zoukankan      html  css  js  c++  java
  • springboot项目部署双数据源

    首先在说明一下在开发中遇到的场景,项目中需要扫描oracle的数据库,是做的分批次扫描,所以需要将扫描的最后的坐标也就是id或者时间戳之类的存入另一个小型的数据库中,也就是H2中。在下一次扫描时取出坐标,作为oracle查询条件进行扫描

    1、导入maven依赖坐标,分别为Oracle,H2,动态数据源baomidou

            <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc6</artifactId>
                <version>11.2.0.3</version>
             </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>${h2.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>connector</artifactId>
                <version>1.0.0</version>
            </dependency>    
         <!--主从配置依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                <version>2.4.2</version>
            </dependency>

    2、主数据源yml配置

      datasource:
        dynamic:
          primary: master
          datasource:
            master:
              username: system
              password: 123456
              driver-class-name: oracle.jdbc.driver.OracleDriver
              url: jdbc:oracle:thin:@127.0.0.1:1521:orcl

    3、从数据源yml配置

      datasource:
        dynamic:
          datasource:
            slave:
              username: root
              password: root
              driver-class-name: org.h2.Driver
              url: jdbc:h2:~/test

    4、最后在服务层实现中添加@DS注解类区分主从数据源

    @Service
    @DS("master")
    public class OrgServiceImpl implements OrgService {
    
        @Autowired
        DataMapper dataMapper;
    
        public List<Map<String, Object>> selectAllMysql(String initId, String cols,String table,String schema,String pk,String rows) {
            return dataMapper.selectAllMysql(initId, cols,table,schema,pk,rows);
        }
    
        public List<Map<String, Object>> selectAllOrcle(String initId, String cols,String table,String schema,String pk,String rows) {
            return dataMapper.selectAllOrcle(initId,cols,table,schema,pk,rows);
        }
    
    
    
        @Override
        public List<Map<String, Object>> selectMysqlByDateTime(String field, String timeField, String param, String startTime, String endTime, String schema, String table) {
            return dataMapper.selectMysqlByDateTime(field, timeField, param, startTime, endTime, schema, table);
        }
    
        @Override
        public List<Map<String, Object>> selectMysqlByLongTime(String field, String timeField,
                                                               String param, Long startTime, Long endTime, String schema, String table) {
            return dataMapper.selectMysqlByLongTime(field, timeField, param, startTime, endTime, schema, table);
        }
    
        @Override
        public List<Map<String, Object>> selectOracleByTimeStamp(String field, String timeField,
                                                                 String param, String startTime, String endTime, String schema, String table) {
            return dataMapper.selectOracleByTimeStamp(field, timeField, param, startTime, endTime, schema, table);
        }
    
        @Override
        public List<Map<String, Object>> selectOracleByNumber(String cols, String timeField, String initId, Long lastExeTime, Long nowTime, String schema, String table) {
            return dataMapper.selectOracleByNumber(cols, timeField, initId, lastExeTime, nowTime, schema, table);
        }
    
        @Override
        public Map<String, Object> selectById(Long id, String field) {
            return dataMapper.selectById(id, field);
        }
    
    }
    @Service
    @DS("slave")
    public class H2DbServiceImpl implements H2DbService {
    
        @Autowired
        DataMapper dataMapper;
    
        @Override
        public Agent selectAgentAll() {
            return dataMapper.selectAgentAll();
        }
    
        @Override
        public String selectInitId() {
            return dataMapper.selectInitId();
        }
    
        @Override
        public String selectSourceTime() {
            return dataMapper.selectSourceTime();
        }
    
        @Override
        public int updateInitId(String initId) {
            return dataMapper.updateInitId(initId);
        }
    
        @Override
        public int updateSourceTime(String sourceTime) {
            return dataMapper.updateSourceTime(sourceTime);
        }
    
        @Override
        public int insert(String initId) {
            return dataMapper.insertInitId(initId,System.currentTimeMillis());
        }
    }
  • 相关阅读:
    (转)【经验之谈】Git使用之Windows环境下配置
    (转)SQL Server内存遭遇操作系统进程压榨案例
    (转)【javascript基础】原型与原型链
    (转)微信公众平台开发教程目录
    (转)C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单
    (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
    (转)微信公众平台开发教程(七)Session处理
    多线程入门-创建线程
    MySQL数据库优化
    图解:从单个服务器扩展到百万用户的系统
  • 原文地址:https://www.cnblogs.com/liuzhengkun/p/13360532.html
Copyright © 2011-2022 走看看