赞
踩
业务场景说明:
老系统使用的是大名鼎鼎的 ORACLE数据库,新系统由于公司 要走 【国产化】使用 达梦数据库,(达梦数据库使用起来真垃圾,不是一般的垃圾)。由于老系统数据表结构 与 新系统不能完全趋向一致,所以考虑使用接口或者定时任务处理业务数据。使用多数据源处理
1.application-druid.yml 配置
1.1maven 依赖
- <!--oracle驱动-->
- <dependency>
- <groupId>com.oracle.database.jdbc</groupId>
- <artifactId>ojdbc6</artifactId>
- <version>11.2.0.4</version>
- </dependency>
# 数据源配置 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<Login> oracleLoginDataList = (List<Login>) 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);

4.

oracle测试数据
达梦入库的数据

这里注意的是,一定要在上层 依次调用不同数据源的方法,否则会出现 多数据源失效问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。