信创
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和10024queueConnectionFactory = new QueueConnectionFactory();queueConnectionFactory.setProperty("tmqiAddressList", "tlkq://10.10.10.8:10024");//==创建Connection和SessionqueueConnection = queueConnectionFactory.createQueueConnection();queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);//==打开TLQ 队列和创建QueueSenderqueue = 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: 5000msjedis: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>() {@Overridepublic 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>
官网对应下载包 /
对应JDK1.8版本
2 配置数据库地址, 需要注意脚本方言为: helperDialect: oracle, URL后面不能带任何参数,记得修改插件方言
############## 数据源
master:datasource:url: jdbc:dm://192.168.1.90:5236username: J7EUl2ZBPKM=password: Soxks8s/VLiHR9Jo0gssJg==driverClassName: dm.jdbc.driver.DmDrivervalidationQuery: select 1testOnBorrow: truetestWhileIdle: true
## mappers 多个接口时逗号隔开
mapper:mappers: com.moan.hoe.base.config.mybatis.MyMappernot-empty: falseidentity: oracle
pagehelper:page-size-zero: truehelperDialect: oraclereasonable: truesupportMethodsArguments: trueparams: count=countSql
在项目创建lib目录,引入包
代码中遇到的SQL语法问题, 这是大坑
达梦是基于Oracle数据库,不支持主键自增长,其提供了一种叫做"序列(sequence)"的机制生成主键。此时,GenerationType.SEQUENCE就可以作为主键生成策略
Mysql 实体类注解生成主键 @GeneratedValue(strategy = GenerationType.IDENTITY)
Oracle 实体类注解生成主键 @GeneratedValue(strategy = GenerationType.SEQUENCE)
两者都兼容的类型 @GeneratedValue(strategy = GenerationType.AUTO) 自增和赋值主键
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")
信创
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和10024queueConnectionFactory = new QueueConnectionFactory();queueConnectionFactory.setProperty("tmqiAddressList", "tlkq://10.10.10.8:10024");//==创建Connection和SessionqueueConnection = queueConnectionFactory.createQueueConnection();queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);//==打开TLQ 队列和创建QueueSenderqueue = 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: 5000msjedis: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>() {@Overridepublic 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>
官网对应下载包 /
对应JDK1.8版本
2 配置数据库地址, 需要注意脚本方言为: helperDialect: oracle, URL后面不能带任何参数,记得修改插件方言
############## 数据源
master:datasource:url: jdbc:dm://192.168.1.90:5236username: J7EUl2ZBPKM=password: Soxks8s/VLiHR9Jo0gssJg==driverClassName: dm.jdbc.driver.DmDrivervalidationQuery: select 1testOnBorrow: truetestWhileIdle: true
## mappers 多个接口时逗号隔开
mapper:mappers: com.moan.hoe.base.config.mybatis.MyMappernot-empty: falseidentity: oracle
pagehelper:page-size-zero: truehelperDialect: oraclereasonable: truesupportMethodsArguments: trueparams: count=countSql
在项目创建lib目录,引入包
代码中遇到的SQL语法问题, 这是大坑
达梦是基于Oracle数据库,不支持主键自增长,其提供了一种叫做"序列(sequence)"的机制生成主键。此时,GenerationType.SEQUENCE就可以作为主键生成策略
Mysql 实体类注解生成主键 @GeneratedValue(strategy = GenerationType.IDENTITY)
Oracle 实体类注解生成主键 @GeneratedValue(strategy = GenerationType.SEQUENCE)
两者都兼容的类型 @GeneratedValue(strategy = GenerationType.AUTO) 自增和赋值主键
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")