金蝶Apusic分布式消息队列
不需要配置用户名密码
rabbitmq:
enable: true
host: 192.168.1.233
port: 5672
<!-- Spring Boot RabbitMQ 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.18.RELEASE</version>
</dependency>
3 代码配置,“vhost”虚拟机名称需要登录MQ界面新建
通过在 ADMQ 代理上引入 AMQP 协议处理程序,为 ADMQ 带来了原生的 AMQP 协议支持。
@Bean
public ConnectionFactory connectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
connectionFactory.setVirtualHost("vhost");
connectionFactory.setPublisherConfirms(true); //设置发送消息失败重试
connectionFactory.setChannelCacheSize(100);//解决多线程发送消息
return connectionFactory;
}
Apusic内存数据缓存
redis:
## Redis数据库索引(默认为0)
database: 0
## Redis服务器地址
host: 192.168.1.9
## Redis服务器连接端口
port: 6359
## Redis服务器连接密码(默认为空)
ssl: false #启用SSL终端识别
password:
timeout: 5000ms
jedis:
pool:
## 连接池最大连接数(使用负值表示没有限制)
max-active: 8
## 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
## 连接池中的最大空闲连接
max-idle: 8
## 连接池中的最小空闲连接
min-idle:
依赖包,其实还是springboot-redis那套
<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>
执行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);
}
});
}
人大金仓KingBaseES 数据库,底层其实是pgsql
<!--KingBase-->
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
</dependency>
手动下载驱动包,地址https://www.kingbase.com.cn/qd/index.htm
2 配置数据库地址, 需要注意脚本方言为: helperDialect: postgresql
############## 数据源
master:
datasource:
url: jdbc:kingbase8://192.168.1.9:54321/hoe_hospital?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8&useSSL=false
username: J7EUl2ZBPKM=
password: Soxks8s/VLiHR9Jo0gssJg==
driverClassName: com.kingbase8.Driver
validationQuery: select 1
testOnBorrow: true
testWhileIdle: true
## mappers 多个接口时逗号隔开
mapper:
mappers: com.moan.hoe.base.config.mybatis.MyMapper
not-empty: false
identity: kingbase8
pagehelper:
page-size-zero: true
helperDialect: postgresql
reasonable: true
supportMethodsArguments: true
params: count=countSql
SQL语法问题,需要在业务中慢慢排查,关键字和内置函数都不太友好
1> 当mysql某个字段的类型为 tinyint时,且长度为1,迁移到金仓时,自动转换为 true 或 false;(需要讲tinyint改为2,才可以保持一样的数值,对应类型为Integer);
tbl_menu_element 修改 is_deleted 为boolean
tbl_menu 修改 is_disable 为boolean
2> mysql FIELD()函数替换掉 decode()
3> 数据库初始化大小写不区分,
4> 别名不能加mysql自动生成斜单引号,中文别明不能加单引号;
5> mysql的函数和存储过程无法直接兼容kingBaseES库
6> mysql的group_concat函数 kingbaseEs——string_agg(expression,delimiter) 输入值连接成一个串,用定界符分隔
7> 命名需要加 as 关键字;select name,或者t.name 关键字都不需要加`` 上单引号,否则报错 (2)传参数时,数据加是什么类型,参数就一定要相同,否则报错, boolean 不能写成"0"或者"1" 这种传参
8> 实体类的自增主键问题,去掉 //@GeneratedValue(strategy = GenerationType.IDENTITY) 只需保留@ID注解,需要在插入的时候给ID主键赋值,去掉自增注解并未解决,需要升级mybaits-plus插件最新版本
9> 自定义SQL函数或者存储过程都需要重写
要先创建模式,相当于创建数据库,跨库查询的话,一定把所有模式创建到主模式下,才可以进行跨库查询表,
登录web管理界面 , 新建源数据 ,需要配置参数的可以在后面加 如tinyntlisBit=false 可以区分boolean类型
主要是新建源 数据到目标数据,再创建一个任务,启动任务后去执行两边的数据对比和导入
服务器
操作系统是: 统信uos