springboot项目部署双数据源

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

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

官网文档地址:https://baomidou.gitee.io/dynamic-datasource-doc/

            <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>

          <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
          <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid-spring-boot-starter</artifactId>
          <version>1.1.10</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());
    }
}

 

posted @ 2020-07-22 14:33  稻火  阅读(368)  评论(0编辑  收藏  举报