当前位置:   article > 正文

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

oracle多数据源

业务场景说明:

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

1.application-druid.yml  配置

  1.1maven 依赖

  1. <!--oracle驱动-->
  2. <dependency>
  3. <groupId>com.oracle.database.jdbc</groupId>
  4. <artifactId>ojdbc6</artifactId>
  5. <version>11.2.0.4</version>
  6. </dependency>
  1. # 数据源配置
  2. spring:
  3. datasource:
  4. type: com.alibaba.druid.pool.DruidDataSource
  5. #driverClassName: dm.jdbc.driver.DmDriver
  6. druid:
  7. # 主库数据源
  8. master:
  9. url: jdbc:dm://127.0.0.1:5237/AAAA?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  10. username: PSMS
  11. password: 123456789
  12. # 从库数据源
  13. slave:
  14. # 从数据源开关/默认关闭
  15. enabled: true
  16. url: jdbc:oracle:thin:@111.111.111.111:111/BBB
  17. username: ROOT
  18. password: 123456
  19. driverClassName: oracle.jdbc.driver.OracleDriver
  20. # 初始连接数
  21. initialSize: 5
  22. # 最小连接池数量
  23. minIdle: 10
  24. # 最大连接池数量
  25. maxActive: 20
  26. # 配置获取连接等待超时的时间
  27. maxWait: 60000
  28. # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  29. timeBetweenEvictionRunsMillis: 60000
  30. # 配置一个连接在池中最小生存的时间,单位是毫秒
  31. minEvictableIdleTimeMillis: 300000
  32. # 配置一个连接在池中最大生存的时间,单位是毫秒
  33. maxEvictableIdleTimeMillis: 900000
  34. # 配置检测连接是否有效
  35. validationQuery: SELECT 1 FROM DUAL
  36. testWhileIdle: true
  37. testOnBorrow: false
  38. testOnReturn: false
  39. webStatFilter:
  40. enabled: true
  41. statViewServlet:
  42. enabled: true
  43. # 设置白名单,不填则允许所有访问
  44. allow:
  45. url-pattern: /druid/*
  46. # 控制台管理用户名和密码
  47. login-username:
  48. login-password:
  49. filter:
  50. stat:
  51. enabled: true
  52. # 慢SQL记录
  53. log-slow-sql: true
  54. slow-sql-millis: 1000
  55. merge-sql: true
  56. wall:
  57. config:
  58. multi-statement-allow: true

2.DataSource注解

  1. package com.aaaa.common.annotation;
  2. import java.lang.annotation.Documented;
  3. import java.lang.annotation.ElementType;
  4. import java.lang.annotation.Inherited;
  5. import java.lang.annotation.Retention;
  6. import java.lang.annotation.RetentionPolicy;
  7. import java.lang.annotation.Target;
  8. import com.ruoyi.common.enums.DataSourceType;
  9. /**
  10. * 自定义多数据源切换注解
  11. *
  12. * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
  13. *
  14. * @author wangwei
  15. */
  16. @Target({ ElementType.METHOD, ElementType.TYPE })
  17. @Retention(RetentionPolicy.RUNTIME)
  18. @Documented
  19. @Inherited
  20. public @interface DataSource
  21. {
  22. /**
  23. * 切换数据源名称
  24. */
  25. public DataSourceType value() default DataSourceType.MASTER;
  26. }

3.详细使用

  1. @ApiOperation(value = "oracle数据源 同步 达梦数据库")
  2. @GetMapping("/oracleUserToDMList")
  3. public AjaxResult oracleUserToDMList() {
  4. Login login = new Login();
  5. AjaxResult ajaxResult = loginService.selectLoginList(login);
  6. if (!"200".equals(ajaxResult.get("code").toString())) {
  7. throw new CustomException("老系统oracle网络异常,请检查数据源配置,用户名,密码,或者网络是否通信。请开发人员排查!");
  8. }
  9. List<Login> oracleLoginDataList = (List<Login>) ajaxResult.get("data");
  10. if (StringUtils.isEmpty(ajaxResult.get("data").toString())) {
  11. throw new CustomException("老系统数据查询有问题,请开发人员排查!");
  12. }
  13. if (oracleLoginDataList.size() < 1) {
  14. throw new CustomException("获取的老系统数据转换有问题,请开发人员排查!");
  15. }
  16. int inserNum = 0;
  17. int inserErrNum = 0;
  18. for (int i = 0; i < oracleLoginDataList.size(); i++) {
  19. SysUser sysUser = new SysUser();
  20. sysUser.setUserName(oracleLoginDataList.get(i).getUsername());
  21. sysUser.setNickName(oracleLoginDataList.get(i).getUserrealname());
  22. //同步的老系统用户密码 明文统一为 1111111
  23. sysUser.setPassword("gtWs/z111111111=");
  24. //新系统 0:正常 1:停用 老系统有字段是 ISDELETE = 1 ,删除的用户直接是物理删除
  25. sysUser.setStatus(String.valueOf(0));
  26. sysUser.setUnit(oracleLoginDataList.get(i).getUnit());
  27. sysUser.setIdnumber(oracleLoginDataList.get(i).getIdnumber());
  28. sysUser.setArea(oracleLoginDataList.get(i).getArea());
  29. sysUser.setDivision(oracleLoginDataList.get(i).getDivision());
  30. sysUser.setRemark("老系统接口同步数据");
  31. int i1 = sysUserMapper.insertUser(sysUser);
  32. if (i1 == 1) {
  33. inserNum = inserNum + 1;
  34. } else {
  35. inserErrNum = inserErrNum + 1;
  36. }
  37. }
  38. if (oracleLoginDataList.size() == inserNum) {
  39. return AjaxResult.success("同步成功:" + inserNum + " 条,用户数据, 失败: " + inserErrNum + " 条!");
  40. }
  41. return AjaxResult.error("oracle数据同步 达梦 失败,请开发人员检查!");
  42. }

3.1 oracle数据源读数据

  1. /**
  2. * 查询老系统-用户表列表
  3. *
  4. * @param login 老系统-用户表
  5. * @return 老系统-用户表
  6. */
  7. @Override
  8. @DataSource(value = DataSourceType.SLAVE)
  9. public AjaxResult selectLoginList(Login login)
  10. {
  11. return AjaxResult.success(loginMapper.selectLoginList(login));
  12. }

3.2 达梦入库  oracle的数据

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

  1. /**
  2. * 新增用户信息
  3. *
  4. * @param user 用户信息
  5. * @return 结果
  6. */
  7. public int insertUser(SysUser user);

4.

 oracle测试数据

达梦入库的数据

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52355
推荐阅读
相关标签
  

闽ICP备14008679号