信创-东方通和达梦适配

news2024/9/21 3:12:35

1 TLQ8.0 简单的例子,发送MQ,然后收消息连接是一样的,要不断去拉取数据消费的

public static void main(String[] args) {
    //==发送消息的目的队列
    String queName = "lq";
    //==连接工厂类
    QueueConnectionFactory queueConnectionFactory = null;
    //==连接类
    QueueConnection queueConnection = null;
    //==会话类
    QueueSession queueSession = null;
    //==打开的队列
    Queue queue = null;
    //==生产者
    QueueSender queueSender = null;

    try {
      //==创建连接工厂对象,并设置服务器地址信息,如果应用和TLQ服务端不在同一台机器上,请使用实际的服务端IP和Port替代下方的127.0.0.1和10024
      queueConnectionFactory = new QueueConnectionFactory();
      queueConnectionFactory.setProperty("tmqiAddressList", "tlkq://10.10.10.8:10024");
      //==创建Connection和Session
      queueConnection = queueConnectionFactory.createQueueConnection();
      queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
      //==打开TLQ 队列和创建QueueSender
      queue = queueSession.createQueue(queName);
      queueSender = queueSession.createSender(queue);
      //==启动连接
      queueConnection.start();

      //==生成一个TEXT类型消息
      Message message = queueSession.createTextMessage("QueueSenderNoJNDI Message");
      System.out.println("发送消息...");
      queueSender.send(message);
      System.out.println("发送完成...");

    } catch (Exception jmse) {
      System.out.println("Exception oxxurred :" + jmse.toString());
      jmse.printStackTrace();
    } finally {
      try {
        if (queueSession != null) {
          //==关闭会话
          queueSession.close();
        }
        if (queueConnection != null) {
          //==关闭连接
          queueConnection.close();
        }
      } catch (Exception e) {
        System.out.println("退出时发生错误。");
        e.printStackTrace();
      }
    }
  }
tlclient.jar
TongJMS.jar

    <!-- 东方通包  依赖 -->
        <dependency>
            <groupId>com.tongtech.rds</groupId>
            <artifactId>spring-boot-starter-rds</artifactId>
            <version>1.2.1</version>
        </dependency>

TongRDS内存数据库

 redis:
    ## Redis数据库索引(默认为0)
    database: 0
    ## Redis服务器地址
    host: 192.168.1.90
    ## Redis服务器连接端口
    port: 6379
    ## Redis服务器连接密码(默认为空)
    ssl: false #启用SSL终端识别
    password: 
    timeout: 5000ms
    jedis:
      pool:
        ## 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        ## 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
        ## 连接池中的最大空闲连接
        max-idle: 8
        ## 连接池中的最小空闲连接
        min-idle:

依赖包修改,去掉redis自带的lettuce,

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
   <version>2.7.2</version>
   <exclusions>
      <exclusion>
         <groupId>io.lettuce</groupId>
         <artifactId>lettuce-core</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
</dependency>

redis配置类里,增加一个配置项,实际上他们的RDS是用socket连接的,我这里直接使用springboot的配置去连接,也能连接成功,不过最开始有一个坑,序列化object对象存数据的时候,解析有问题,然后更新了他们提供的包,并且在安装RDS 、apps/etc/cfg.xml 文件里增加配置,开启二进制

<BinaryCompatible>true</BinaryCompatible>

    @Bean // redis连接
    public RedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory cf = null;
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        // redisStandaloneConfiguration.setPassword(RedisPassword.of(redisPasswd));
        cf = new JedisConnectionFactory(redisStandaloneConfiguration);
        cf.afterPropertiesSet();
        return cf;
    }

还有外需要修改,单个KEY最大值是200有时候存KEY变报错,KEY太长,需要修改1000等看需求

<BinaryCompatible>true</BinaryCompatible>

<Key>bytes,200</Key>

执行LUA脚本问题,需要我们本地代码进行适配和改造


    public static <T> T execute(StringRedisTemplate stringRedisTemplate,final RedisScript<T> script, final List<String> keys, final Object[] args) {
        return stringRedisTemplate.execute(new RedisCallback<T>() {
            @Override
            public T doInRedis(RedisConnection connection) throws DataAccessException {
                Object nativeConnection = connection.getNativeConnection();
                // redis序列化key、value、lua脚本
                RedisSerializer keySerializer = stringRedisTemplate.getKeySerializer();
                RedisSerializer valueSerializer = stringRedisTemplate.getValueSerializer();
                RedisSerializer<String> stringSerializer = stringRedisTemplate.getStringSerializer();

                List<byte[]> keys_ByteArr = new ArrayList<byte[]>(keys.size());
                List<byte[]> args_ByteArr = new ArrayList<byte[]>(args.length);

                for (int i = 0; i < keys.size(); i++) {
                    keys_ByteArr.add(keySerializer.serialize(keys.get(i)));
                }
                for (int j = 0; j < args.length; j++) {
                    args_ByteArr.add(valueSerializer.serialize(args[j]));
                }
                byte[] scriptByte = stringSerializer.serialize(script.getScriptAsString());
                if (nativeConnection instanceof JedisCluster) {
                    return (T) ((JedisCluster) nativeConnection).eval(scriptByte, keys_ByteArr, args_ByteArr);
                }
                // 单点
                else if (nativeConnection instanceof Jedis) {
                    return (T) ((Jedis) nativeConnection).eval(scriptByte, keys_ByteArr, args_ByteArr);
                }
                // 单机模式
                return (T) ((Jedis) nativeConnection).eval(scriptByte, keys_ByteArr, args_ByteArr);
            }
        });
    }

达梦dm 数据库


<!--dameng-->
        <dependency>
            <groupId>com.dameng</groupId>
            <artifactId>dm-jdbc</artifactId>
            <version>1.8</version>
        </dependency>

官网对应下载包 https://eco.dameng.com/download/

对应JDK1.8版本

2 配置数据库地址, 需要注意脚本方言为: helperDialect: oracle, URL后面不能带任何参数,记得修改插件方言

############## 数据源
master:
  datasource:
    url: jdbc:dm://192.168.1.90:5236
    username: J7EUl2ZBPKM=
    password: Soxks8s/VLiHR9Jo0gssJg==
    driverClassName: dm.jdbc.driver.DmDriver
    validationQuery: select 1
    testOnBorrow: true
    testWhileIdle: true
## mappers 多个接口时逗号隔开
mapper:
  mappers: com.moan.hoe.base.config.mybatis.MyMapper
  not-empty: false
  identity: oracle
pagehelper:
  page-size-zero: true
  helperDialect: oracle
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

在项目创建lib目录,引入包

代码中遇到的SQL语法问题, 这是大坑

1> 当mysql某个字段的类型为 tinyint时,且长度为1,迁移到达梦时,需要创建一个bool类型转换为 true 或 false; 否则需要在代码转化为boolean时,先转为byte再转为bollean

2> mysql group_concat()函数替换掉 达梦的 to_char(wm_concat());函数'

3> 数据库初始化模式名称必须大写,表名全部大写

4> (1) mysql的函数split_part 不兼容,需要替换成regexp_substr函数 (2) mysql的时间函数date()替换掉to_date()函数。

5> mysql的函数和存储过程无法直接兼容dm数据库,必须重新写

6> 传参数时,数据加是什么类型,参数就一定要相同,否则报错, boolean 不能写成"0"或者"1" 这种传参

7> 实体类的自增主键问题,去掉 //@GeneratedValue(strategy = GenerationType.IDENTITY) 只需保留@ID注意,在数据插入后,必须查询出主键值,否则实体对象ID是空值,需要升级mybaits-plus插件最新版本

8> DISTINCT 去熏关键字,在多个字段上 并且有排序,会查询失败

数据迁移, 用他们自己的,安装客户端,同步数据是从源MYSQL ==》 达梦数据库,修改创建模式,每个模式就是一个数据库实例

在项目里使用还必须是大写的SQL查询,然后查询结果需要转化成小写,因为有些封装是MAP格式,业务代码太多SQL改造难度就更大了,还有在实体类的时候,尽量写上实体表名和数据库名

@Table(name = "items_student", schema = "hoe_activity")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造业仓库很乱,该如何有效的管理呢?

首先来统计一下制造业仓库很乱的问题&#xff1a; 1.管理多仓库/多店铺&#xff0c;库存不清2.库存控制不合理&#xff0c;出现滞销与脱销的情况3.库存盘点时间长&#xff0c;数据不准确在传统管理模式下&#xff0c;一些中小型制造业的仓库&#xff0c;物料摆放位置、明细等都…

TOOLS_Seaborn相关性可视化分析示例

TOOLS_Seaborn相关性可视化分析示例 相关性应用场景 如要回答 推测 网站留存、观看时长、收藏次数、转发次数、关注数之间是否存在相关性&#xff0c;以及相关性有多大的问题&#xff1b; 对于更有关注的留存&#xff0c;可以尝试分析一个与其相关性比较大的因素&#xff0c…

【大数据专题】大数据理论基础01之分布式CPA原理深入理解

分布式CAP定理 CAP定理又称CAP原则&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;最多只能同时三个特性中…

编写一个Vue插件,上传NPM官网开源使用

插件开发及上传NPM流程 完成组件封装、组件完成统一封装成插件插件入口文件配置src/main.js 中引入口文件、安装插件配置 package.json 文件npm run lib 打包umd.min.js 配置到 package.json登录 NPM 上传插件npm i 安装引入使用 一、编写好组件 二、插件入口文件配置 plugins/…

更安全更稳定,阿里云斩获多项云系统稳定安全运行优秀案例

近日&#xff0c;阿里云凭借在稳定性领域的全栈投入&#xff0c;获评中国信通院混沌工程实验室 2022 年度杰出贡献企业&#xff0c;并斩获“云系统稳定安全运行优秀案例”活动中多领域优秀案例。阿里云持续推动企业 IT 系统建设&#xff0c;保障千行百业安全稳定的实现数字化转…

普通人如何用AI帮你干活——娱乐1

案例描述&#xff1a;一天朋友突然发信息跟我说&#xff1a;看你朋友全最近总在显摆AI作画&#xff0c;看起来好像有点牛逼&#xff1b;我家小朋友最近在参加一个国家绘画比赛&#xff0c;能不能让你的AI帮忙画几张有趣的有创意的画。给小朋友做灵感启发&#xff0c;小朋友可以…

如何处理负面评论?利用负面评论发挥优势

每家公司都应该做的一件事&#xff1a;回复评论&#xff01; 37%的买家积极考虑对评论的回应&#xff0c;以评估和对品牌的看法。所以不要忘记回复评论&#xff01; 如何处理负面评论 如果您的公司正在经历大量负面评论&#xff0c;请了解您的产品团队如何利用它们来发挥自己的…

CSS隐藏元素、BFC、元素居中、布局

1、css中有哪些方式可以隐藏页面元素&#xff1f;区别是什么&#xff1f;1.1 display:none元素在页面上将彻底消失&#xff0c;元素本身占有的空间会被其他元素占有&#xff0c;导致浏览器的重排和重绘。特点&#xff1a;元素不可见&#xff0c;不占据空间&#xff0c;不会触发…

面试阿里自动化测试工程师被狂虐,回家猛补3个月,成功上岸字节

前言 大家好&#xff0c;我是小祖&#xff0c;个人背景&#xff1a;985中下游&#xff0c;无大厂实习&#xff08;小厂打杂&#xff09;&#xff0c;无竞赛&#xff0c;无相关论文。 毕业几年&#xff0c;表面上用过很多技术&#xff0c;但都没能深入学习&#xff0c;一年的工…

python 支付宝营销活动现金红包开发接入流程-含接口调用加签

1 创建网页/移动应用 2 配置接口加签方式 涉及到金额的需要上传证书&#xff0c;在上传页面有教程&#xff0c; 在支付宝开放平台秘钥工具中生成CSR证书&#xff0c;会自动保存应用公钥和私钥到电脑上&#xff0c;调用支付宝接口需要应用私钥进行加签 上传完CSR证书后会有三个…

互联网衰退期,测试工程师35岁的路该怎么走...

国内的互联网行业发展较快&#xff0c;所以造成了技术研发类员工工作强度比较大&#xff0c;同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高&#xff0c;超过35岁的基层研发类员工&#xff0c;往往因为家庭原因、身体原因&#xff0c;比较难以跟得上工作…

DSP_TMS320F28335_PIE学习笔记

前言 本文重点探讨DSP PIE模块的学习笔记&#xff0c;由于学这部内容的时候&#xff0c;是用28335学的&#xff0c;所以标题是用的28335&#xff0c;但其实28377D和28335的PIE使用基本上是一样的&#xff0c;也是可以借鉴的。 正文 原理 讲点原理&#xff0c;PIE&#xff0…

linux minio更改密码MINIO_ACCESS_KEY报错

minio版本RELEASE.2020-11-13T20-10-18Z启动文件配置如下cat run.sh#!/bin/bashexport MINIO_ACCESS_KEYminioexport MINIO_SECRET_KEYfasffnohup /opt/minio/minio.RELEASE.2020-11-13T20-10-18Z server http://192.168.100.x/data/minio_data http://192.168.100.x/data/mini…

Docker中对已存在运行的容器修改端口映射

一、初次创建容器&#xff0c;指定宿主机和容器端口的映射&#xff0c;如下示例&#xff1a; docker run -itd -p 11935:1935 -p 11985:1985 -p 18080:8080 -p 20903:20903 -p 18888:8888 \ --restartalways \ -v /srv/srs3/conf/:/usr/local/srs/conf/ \ -v /srv/srs3/objs/:…

Android总结汇总

一、APP1、混合开发项目AHP地址&#xff1a;https://github.com/Witnin/AHP简介&#xff1a;KotlinJava二、路由框架1、集成ARouter导航框架官网地址&#xff08;停止维护&#xff09;&#xff1a;https://github.com/alibaba/ARouter/blob/master/README_CN.mdjadepeakpoet&am…

Leedcode 1011. 在 D 天内送达包裹的能力

题目 传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。 传送带上的第 i 个包裹的重量为 weights[i]。每一天&#xff0c;我们都会按给出重量&#xff08;weights&#xff09;的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 返回能在 day…

利用DSCync进行域内权限维持

一个域环境可以拥有多台域控制器&#xff0c;每台域控制器各自存储着一份所在域的活动目录的可写副本&#xff0c;对目录的任何修改都可以从源域控制器同步到本域、域树或域林中的其他域控制器上。当一个域控想从另一个域控获取域数据更新时&#xff0c;客户端域控会向服务端域…

【Echarts图例点击事件】自定义Echarts图例legend点击事件(已解决)

目录先睹为快&#xff08;效果&#xff09;1、实现Echarts多条曲线2、点击echarts触发接口请求2.1 先默认隐藏部分数据2.2 自定义legend图例点击事件3、源码下载地址&#xff08;解压即用&#xff09;**【写在前面】**这下我又不得不说了&#xff0c;还是客户现场使用时想查询一…

宽度学习系统BLS推广到在线学习的论文阅读记录

BELS: A BROAD ENSEMBLE LEARNING SYSTEM FOR DATA STREAM CLASSIFICATION 摘要&#xff1a;这篇文章主要是将BLS推广到适用于在线学习的邻域&#xff0c;提出了其如何进行适合在线学习的增量更新&#xff0c;以及面对概念漂移的适应 所提出的算法BELS 稀疏特征映射的更新 …

【牛客网刷题记录】,后面遇到的一些问题都会在这里记录,欢迎大家批评指正

文章目录数据结构篇数组字符串链表树图堆算法篇哈希查找排序数据库篇SQL语言篇数据结构篇 数组 省流&#xff1a; 计算二维数组指定元素的位置压缩矩阵 1. 执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。 char a[] "abcd", b[10] "abcd"…