总体支持

截止至3.2.0版本,已经支持如下信创产品:

操作系统 数据库 业务中间件 消息中间件
银河麒麟桌面版V10(AMD,ARM) 达梦dm 金碟中间件Aas敏捷版 东方通TongHTP
银河麒麟服务器版V10(AMD,ARM) 华为gaussDB 金证中间件Kwas

数据库适配

达梦数据库适配

1.数据库脚本

v3.2.0脚本下载

  • 直接运行v3.2.0/dm/tablev3.2.0/dm/data下的kems-all.sql,跳过以下两步。

  • 业务组件

    v3.2.0版本: 按所需模块分别运行v3.2.0/dm/tablev3.2.0/dm/data下的kems-module-system.sqlkems-module-log.sqlkems-module-file.sqlkems-module-mns.sqlkems-module-datasync.sql即可(data下不存在的则不用运行,无需初始化数据)。

  • 监控运维平台

v3.2.0版本:运行v3.2.0/dm/tablev3.2.0/dm/data下的kems-amo.sql即可。

2.依赖配置

如果使用了kems-starter-msa-mybatis 启动器,则先剔除mysql依赖,再加上达梦驱动依赖

<dependency>
    <groupId>com.kingengine.kems.starter</groupId>
    <artifactId>kems-starter-msa-mybatis</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>mysql-connector-java</artifactId>
            <groupId>mysql</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.2.79</version>
</dependency>

3.数据源配置

koca: #数据源配置,支持多数据源
  jdbc:
    defaultDataSourceId: default
    dataSources:
      - id: default
        pool:
          driver-class: dm.jdbc.driver.DmDriver
          url: jdbc:dm:/127.0.0.1:5237?schema=KEMSADMINDEMO-220&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
          username: SYSDBA
          password: SYSDBA
          initialSize: 5
          minIdle: 10
          maxActive: 30
          maxWait: 60000

4.出现的不兼容问题

出错大部分是关键字不适配,数据库设计存在差异,可通过简化的方式实现适配。

目前发现达梦的不兼容的关键字

1.visible

2.nocompress

3.immediate

4.noparallel

5.语句复杂不能适配

其他情况

1.字符串大小写,建库时注意大小写设置是否符合实际脚本,是否实现对大小写的区分。

2.字段超长问题

设置最大长度可到32k,还超长则设置参数,“data/DAMENG/dm.ini”文件,调整CLOB_LIKE_MAX_LEN参数值。

gaussDB适配

1.数据库脚本

下载v3.2.0脚本(同上:达梦数据库适配—1.数据库脚本)

  • 直接运行v3.2.0/gaussDB下的kems-module-system.sqlkems-module-log.sqlkems-module-file.sqlkems-module-mns.sqlkems-module-datasync.sql(因3.1.0版本开始监控运维平台已不做更新,因此未提供kems-amo.sql)。
  • 注意:上述五个脚本分别在建好的高斯数据库下的五个数据库中执行,相关数据信息和表信息可进入数据库的public模式查看

2.依赖配置

<dependency>
    <groupId>org.opengauss</groupId>
    <artifactId>opengauss-jdbc</artifactId>
    <version>5.0.0</version>
</dependency>

3.数据源配置

# gaussDB数据源
koca:
  jdbc:
    defaultDataSourceId: default
    dataSources:
      - id: default
        pool:
          url: jdbc:postgresql://127.0.0.1:30100/kems_module_system?sslmode=require
          username: gauss
          password: gauss
          driver-class-name: org.postgresql.Driver
          initialSize: 5
          minIdle: 10
          maxActive: 30
          maxWait: 60000

4.出现的不兼容问题

  • 类型转换
mysql gaussDB
decimal numeric
bigint int8/serial8(serial为自增序列,通常拿来定义id)
int int4/serial4
tinyint int2/serial2
datetime/timestamp timestamp

目前出现其他的不兼容问题只有不支持mysql的ifnull函数,解决方案:替换为COALESCE函数。

如在实际项目中遇见其他不兼容问题,欢迎补充。

业务中间件适配

金蝶中间件(Aas)

金证中间件(Kwas)

对于Spring Boot Servlet应用, 在引用 spring-boot-starter-web 时排除自带的 spring-bootstarter-tomcat 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- Exclude the Tomcat dependency -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- Use Kwas -->
<dependency>
    <groupId>com.szkingdom.kwas</groupId>
    <artifactId>kwas-spring-boot-embed-server</artifactId>
    <version>1.3.0</version>
</dependency>

消息中间件适配

东方通HTP

相关配置

pom.xml

<!--TongHTP 2.0.1.1-->
<dependency>
    <groupId>com.tongtech.client</groupId>
    <artifactId>tongtech-client</artifactId>
    <version>2.0.1.1</version>
</dependency>

<dependency>
    <groupId>com.tongtech.client</groupId>
    <artifactId>springboot</artifactId>
    <version>2.0.1.1</version>
</dependency>

application.yml

# TongHTP相关配置
tlq:
  # 通信域名称,支持英文字母、阿拉伯数字、特殊字符(下划线)的任意组合,且以英文字母开头,最大长度64字节
  domain: domain1
  # 管理节点IP和端口号,tcp[udp]://ipv4地址:端口号(必须修改,需和TLQ9_Mgr/config/nameServer.xml中的<IpAddress>及<ListenPort>相同)
  name-srv-url: tcp://10.202.61.51:9888
  consumer:
    # 消费者组名称,支持英文字母、阿拉伯数字、特殊字符(下划线、点)的任意组合,且以英文字母开头
    # 最大长度32字节,目前仅适用发布订阅模式,并且对消费者起作用
    group: my-group
    # 消费者拉取消息的主题名称,支持英文字母、阿拉伯数字、特殊字符(下划线、点)的任意组合,且以英文字母开头,最大长度128字节
    MsgQueueOrTopic: topic1
    # 接收文件的存放目录
    ReceiveFilePath: /home/tonghtp/file/rev
    # 拉取消息数量
    PullMsgNums: 5
    # 批量拉取消息时,拉取的每批消息数量
    PullMsgBatchNums: 2
  # 应用模式,取值TOPIC和QUEUE,TOPIC:发布订阅模式;QUEUE:点对点模式
  mode-type: TOPIC
  producer:
    # 发送文件的存放目录
    SendFilePath: /home/tonghtp/file/send
    # 发送消息的主题或者队列名称,支持英文字母、阿拉伯数字、特殊字符(下划线、点)的任意组合,且以英文字母开头,最大长度128字节
    MsgQueueOrTopic: topic1
    # 发送消息数量
    SendMsgNums: 1
    # 批量发送消息时,每批消息的数量
    SendMsgBatchNums: 1

代码示例

import com.tongtech.client.producer.TLQProducer;
import com.tongtech.tonglinkq.annotation.TLQMessageListener;
import com.tongtech.tonglinkq.autoconfigure.TLQAutoConfiguration;
import com.tongtech.tonglinkq.support.TLQListener;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

public class TLQAutoConfigurationTest {
    private ApplicationContextRunner runner = new ApplicationContextRunner()
            .withConfiguration(AutoConfigurations.of(TLQAutoConfiguration.class));

    @Configuration
    static class TestConfig {
        @Bean
        public Object consumeListener() {
            return new TestDefaultNameServerListener();
        }

        @Bean
        public Object consumeListener1() {
            return new ProducerTests.TestCustomNameServerListener();
        }
    }

    @TLQMessageListener(consumerGroup = "abc", topicOrQueue = "topic1", domain = "domain1", srvname = "server1")
    static class TestDefaultNameServerListener implements TLQListener {
        @Override
        public void onMessage(Object message) {
            System.out.println("This is My message:" + message);
        }
    }

    @TLQMessageListener(topicOrQueue = "topic2", domain = "domain2", srvname = "server1")
    static class TestCustomNameServerListener implements TLQListener {
        @Override
        public void onMessage(Object message) {
            System.out.println("This is message1:" + message);
        }
    }

    @Test(expected = NoSuchBeanDefinitionException.class)
    public void testDefaultMQProducerNotCreatedByDefault() {
        // You will see the WARN log message about missing rocketmq.name-server spring property when running this test case.
        runner.run(context -> context.getBean(TLQProducer.class));
    }

    @Test
    public void testTLQListenerContainer() {
        runner.withPropertyValues("tlq.name-srv-url=tcp://10.10.82.105:9933", "tlq.mode-type=TOPIC").
                withUserConfiguration(TestConfig.class).
                run((context) -> {
                    System.out.println("This is CONTEXT: " + context);
                });
    }
}

如有其他材料和资源需要请联系相关开发人员

Copyright © 2017-2023 深圳金证引擎科技有限公司 all right reserved,powered by Gitbook该文件最后修订时间: 2023-10-17 10:33:49

results matching ""

    No results matching ""