java操作多数据源将oracle数据同步达梦数据库

业务场景说明:

    老系统使用的是大名鼎鼎的 ORACLE数据库,新系统由于公司 要走 【国产化】使用 达梦数据库,(达梦数据库使用起来真垃圾,不是一般的垃圾)。由于老系统数据表结构 与 新系统不能完全趋向一致,所以考虑使用接口或者定时任务处理业务数据。使用多数据源处理

1.application-druid.yml  配置

  1.1maven 依赖

        
        
            com.oracle.database.jdbc
            ojdbc6
            11.2.0.4
        
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        #driverClassName: dm.jdbc.driver.DmDriver
        druid:
            # 主库数据源
            master:
                url: jdbc:dm://127.0.0.1:5237/AAAA?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: PSMS
                password: 123456789
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: true
                url: jdbc:oracle:thin:@111.111.111.111:111/BBB
                username: ROOT
                password: 123456
                driverClassName: oracle.jdbc.driver.OracleDriver

            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username:
                login-password:
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true

2.DataSource注解

package com.aaaa.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.ruoyi.common.enums.DataSourceType;

/**
 * 自定义多数据源切换注解
 *
 * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
 *
 * @author wangwei
 */
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface DataSource
{
    /**
     * 切换数据源名称
     */
    public DataSourceType value() default DataSourceType.MASTER;
}

3.详细使用

@ApiOperation(value = "oracle数据源  同步 达梦数据库")
    @GetMapping("/oracleUserToDMList")
    public AjaxResult oracleUserToDMList() {
        Login login = new Login();
        AjaxResult ajaxResult = loginService.selectLoginList(login);
        if (!"200".equals(ajaxResult.get("code").toString())) {
            throw new CustomException("老系统oracle网络异常,请检查数据源配置,用户名,密码,或者网络是否通信。请开发人员排查!");
        }
        List oracleLoginDataList = (List) ajaxResult.get("data");
        if (StringUtils.isEmpty(ajaxResult.get("data").toString())) {
            throw new CustomException("老系统数据查询有问题,请开发人员排查!");
        }

        if (oracleLoginDataList.size() < 1) {
            throw new CustomException("获取的老系统数据转换有问题,请开发人员排查!");
        }

        int inserNum = 0;
        int inserErrNum = 0;
        for (int i = 0; i < oracleLoginDataList.size(); i++) {
            SysUser sysUser = new SysUser();
            sysUser.setUserName(oracleLoginDataList.get(i).getUsername());
            sysUser.setNickName(oracleLoginDataList.get(i).getUserrealname());
            //同步的老系统用户密码 明文统一为  1111111
            sysUser.setPassword("gtWs/z111111111=");
            //新系统 0:正常 1:停用   老系统有字段是 ISDELETE = 1 ,删除的用户直接是物理删除
            sysUser.setStatus(String.valueOf(0));
            sysUser.setUnit(oracleLoginDataList.get(i).getUnit());
            sysUser.setIdnumber(oracleLoginDataList.get(i).getIdnumber());
            sysUser.setArea(oracleLoginDataList.get(i).getArea());
            sysUser.setDivision(oracleLoginDataList.get(i).getDivision());
            sysUser.setRemark("老系统接口同步数据");
            int i1 = sysUserMapper.insertUser(sysUser);
            if (i1 == 1) {
                inserNum = inserNum + 1;
            } else {
                inserErrNum = inserErrNum + 1;
            }
        }
        if (oracleLoginDataList.size() == inserNum) {
            return AjaxResult.success("同步成功:" + inserNum + " 条,用户数据, 失败: " + inserErrNum + " 条!");
        }
        return AjaxResult.error("oracle数据同步 达梦 失败,请开发人员检查!");
    }

3.1 oracle数据源读数据

/**
     * 查询老系统-用户表列表
     *
     * @param login 老系统-用户表
     * @return 老系统-用户表
     */
    @Override
    @DataSource(value = DataSourceType.SLAVE)
    public AjaxResult selectLoginList(Login login)
    {
        return AjaxResult.success(loginMapper.selectLoginList(login));
    }

3.2 达梦入库  oracle的数据

      这里没有指定数据源的原因是:项目框架默认指定  达梦数据源

    /**
     * 新增用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int insertUser(SysUser user);

java操作多数据源将oracle数据同步达梦数据库_第1张图片

4.

java操作多数据源将oracle数据同步达梦数据库_第2张图片

 oracle测试数据java操作多数据源将oracle数据同步达梦数据库_第3张图片

达梦入库的数据

java操作多数据源将oracle数据同步达梦数据库_第4张图片

这里注意的是,一定要在上层  依次调用不同数据源的方法,否则会出现  多数据源失效问题

你可能感兴趣的:(vue,oracle,数据库,java)