总体支持
截止至3.2.0版本,已经支持如下信创产品:
操作系统 | 数据库 | 业务中间件 | 消息中间件 |
---|---|---|---|
银河麒麟桌面版V10(AMD,ARM) | 达梦dm | 金碟中间件Aas敏捷版 | 东方通TongHTP |
银河麒麟服务器版V10(AMD,ARM) | 华为gaussDB | 金证中间件Kwas |
数据库适配
达梦数据库适配
1.数据库脚本
直接运行
v3.2.0/dm/table
和v3.2.0/dm/data
下的kems-all.sql
,跳过以下两步。业务组件
v3.2.0
版本: 按所需模块分别运行v3.2.0/dm/table
和v3.2.0/dm/data
下的kems-module-system.sql
、kems-module-log.sql
、kems-module-file.sql
、kems-module-mns.sql
、kems-module-datasync.sql
即可(data下不存在的则不用运行,无需初始化数据)。监控运维平台
v3.2.0
版本:运行v3.2.0/dm/table
和v3.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.sql
、kems-module-log.sql
、kems-module-file.sql
、kems-module-mns.sql
、kems-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);
});
}
}
如有其他材料和资源需要请联系相关开发人员