Redkale 2.7.0 发布,Java 分布式微服务框架


Redkale 2.7.0 发布。

Redkale, 一个Java分布式微服务框架,1.6M的jar可以代替传统几十M的第三方。包含TCP/UDP、HTTP、RPC、依赖注入、序列化与反序列化、数据库操作、WebSocket等功能。  一方面模块高度整合,极大的简化业务开发代码,一方面暴露大量底层,方便二次框架开发。  

Java并不臃肿, 臃肿的是你自己的设计思维!

本次版本更新内容

  1、【新增】增加ConvertCoder功能,可以自定义字段的序列化
  2、【新增】增加JsonMultiDecoder、JsonMultiObjectDecoder、OneOrList功能
  3、【新增】JsonConvert全面兼容JSON5
  4、【新增】增加redkale命令行
  5、【新增】增加HttpRpcAuthenticator功能
  6、【新增】MessageAgent增加配置MessageCoder功能
  7、【新增】实现LoggingSearchHandler功能
  8、【新增】ConvertFactory增加mapFieldFunc、ignoreMapColumns功能
  9、【新增】增加PropertiesAgent功能
 10、【新增】增加链路ID Traces
 11、【新增】增加ResourceListener.different功能
 12、【新增】增加Environment类
 13、【新增】增加RestLocale功能
 14、【优化】优化PrepareServlet中HttpRender的初始化顺序
 15、【优化】日志支持java.util.logging.ConsoleHandler.denyreg配置
 16、【优化】FilterColumn支持least=0时空字符串也参与过滤
 17、【优化】HttpRequest兼容参数名为空字符串
 18、【优化】移除CryptColumn、CryptHandler功能
 19、【优化】PrepareServlet 更名为 DispatcherServlet
 20、【优化】@WebServlet合并url
 21、【修复】修复HttpResponse.finish结果status=404时按200输出的bug
 22、【修复】修复HttpMessageLocalClient创建request时没有赋值给currentUserid值
 23、【修复】修复Rest.createRestServlet带特定泛型问题
 24、【修复】修复Convert模块中父类含public field,subclass不传父类会导致NoSuchFieldError的bug
 25、【修复】修复ApiDocCommand在没有运行时不能生成doc的bug
 26、【修复】修复JsonWriter.writeWrapper按latin1编码写的bug
 27、【修复】修复JsonDynEncoder在定制字段情况下会被全量字段的动态类覆盖的bug

更新详情介绍

Json 序列化功能增强:

   1、支持JSON5

{
 intval1: 0xa, //支持十六进制, 值转成10
 intval2: +100,//支持+开头, 值转成100
 longval1: NaN,//支持NaN, 值转成0
 longval2: Infinity, //值转成Long.MAX_VALUE
 floatval1: NaN, //支持NaN, 值转成Float.NaN
 doubleval: -Infinity, //值转成Double.NEGATIVE_INFINITY
 //这是一个单行注释
 name : "haha",
 /* 这是一个多行注释
这是一个多行注释 */
 desc : "哈哈",
 ints: [1,2,3,4,]//兼容对象尾部多一个','
}

   以上json字符串能正确反解析成Java对象。

   2、OneOrList 

     当一个对象字段可能是单个对象,也可能是对象集合时,可以设定字段类型为 OneOrList<T>

public class JavaBean {

public String name;

public OneOrList<String> address;
}
{"name":"redkale", "address": "wuhan"}

{"name":"redkale", "address": ["wuhan","hubei","china"]}

    上面两个json字符串都可以正确解析成JavaBean对象,  也可以 直接用OneOrList的泛型来反序列化对象:

JsonConvert convert = JsonConvert.root();
Type type = new TypeToken<OneOrList<String>>() {}.getType();
OneOrList<String> one = convert.convertFrom(type, "haha");
OneOrList<String> list = convert.convertFrom(type, "['haha','hehe']");
System.out.println(convert.convertTo(type, one)); //输出: "haha"
System.out.println(convert.convertTo(type, list));//输出: ["haha","hehe"]

    以太坊JSON-RPC规范接口 某些接口中的字段存在这种需求:

   3、ConvertImpl

     当一个对象字段类型是抽象类,反序列化时根据识别子类独有的字段转换成对应的子类, 需要使用ConvertImpl

@ConvertImpl(types = {Bean123.class, Bean23.class, Bean234.class})
publicabstract class AbstractBean {

}

public class Bean123 extends AbstractBean {

public String a1;

public String a2;

public String a3;
}

public class Bean23 extends AbstractBean {

public String a2;

public String a3;
}

public class Bean234 extends AbstractBean {

public String a2;

public String a3;

public String a4;
}



JsonConvert convert = JsonConvert.root();
String json1 = "{'a1':'111', 'a2':'222', 'a3':'333'}";
AbstractBean bean1 = convert.convertFrom(AbstractBean.class, json1); 
System.out.println(bean1);//Bean123对象

String json2 = "{'a2':'222', 'a4':'444', 'a3':'333'}";
AbstractBean bean2 = convert.convertFrom(AbstractBean.class, json2); 
System.out.println(bean2);//Bean234对象

String json3 = "{'a3':'333'}";
AbstractBean bean3 = convert.convertFrom(AbstractBean.class, json3); 
System.out.println(bean3);//Bean23对象, 无子类独有的字段,优先匹配特定字段数最少的子类

String json4 = "{'a1':'111', 'a2':'222', 'a3':'333', 'a4':'444'}";
AbstractBean bean4 = convert.convertFrom(AbstractBean.class, json4); 
System.out.println(bean4);//Bean123对象, a1字段在前面,优先匹配Bean123类

   以太坊JSON-RPC规范接口 某些接口同样存在这种需求。

   4、JsonMultiDecoder

     当一个数组的元素是不同的数据类型时,反序列化时需要使用JsonMultiDecoder(通过JsonConvert调用)

JsonConvert convert = JsonConvert.root();
String json = "['aaaa', ['hehe','haha']]";
Type[] types = new Type[]{String.class, String[].class};
Object[] objs = convert.convertFrom(types, json);
System.out.println(objs[0]); //String对象"aaaa"
System.out.println(objs[1]); //String数组["hehe","haha"]

         注意:  json数组元素的个数必须与Type数组的长度一致。  JSON-RPC 的批量操作接口存在这种需求。

redkale命令行:

    bin下新增了redkale脚本, 通过脚本命令行可以更方便的操作: 


# 启动redkale进程,无参数
./bin/redkale

# 启动redkale进程
./bin/redkalestart

# 关闭redkale进程
./bin/redkaleshutdown

# 重启redkale进程
./bin/redkalerestart

# 生成openapi文档
./bin/redkaleapidoc

    以上是redkale内置的命令,开发者可以通过@Command 自定义命令: 

public class CommandTestService implements Service {

@Command("say") //只接收say命令
public String say(String cmd, String[] params) {
System.out.println("say接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
return "say done";
}

@Command("hi") //只接收hi命令
public String hi(String cmd, String[] params) {
System.out.println("hi接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
return "hi done";
}

@Command//会接收到所有命令
public String all(String cmd, String[] params) {
System.out.println("all接收命令: " + cmd + ", 参数: " + Arrays.toString(params));
return "all done";
}
}


相關推薦

2023-01-18

0 以及 Spring Cloud 2022.0.0、Spring Cloud Tencent 1.8.2 等全新版本发布,整个Java 社区也步入的 Java 17 和 Spring Boot 3 的新时代。紧跟 Java 技术和 Spring 社区的发展,让更多质量更好、性能更优的新特性服务于实际的开发工作,Dante Cloud 也

2024-01-17

4.16.0-java17 增强版更新简介: 代码位于分支: 4.x_java17 feat: 4.x非租户模式首次开源 refactor: 删除无用代码 refactor: database.yml 文件拆分为mysql.yml、oracle.yml、sqlserver.ymlo feat: 新增"查询用户所有应用的可用路由树"接口 refactor:

2023-12-29

4.15.0-java17 增强版更新简介: 代码位于分支: java17 升级内容: 基于xxl-job的定时任务: lamp-job-pro 适配 jdk17 非租户模式,微服务版: lamp-cloud-pro-none 适配jdk17 非租户模式,单体版: lamp-boot-pro-none 适配jdk17 修复代码

2023-01-18

3.9.0-java17-rc2 版本更新详情: build spring-boot>3.0.1 spring-boot-admin.version>3.0.0-M8 hutool.version>5.8.11 mybatis-plus.version>3.5.3.1 refactor 废弃 lamp-dozer-starter,对象转换使用BeanUtil或Mapstruct fix 修复 lamp-captcha-starter 模块

2023-12-08

4.15.0-java17 版本更新简介: 4.x 版本的视频已经全部录制完成,后续开发重点放在4.x版本,3.x逐步放弃维护。 视频限时收藏地址: https://gitee.com/dromara/lamp-cloud/issues/I6NT95 代码位于分支: java17 升级内容: build mybatis-plus.ve

2024-03-05

4.17.0 更新简介: refactor: 登录后获取系统路由和资源的接口合并 refactor: 路由接口同时支持vben-admin和soybean-admin fix(lamp-base-biz): 阿里云文件上传后浏览器访问url 文件名乱码 fix(lamp-base-biz): 保存角色资源时,清理缓存忽

2022-08-02

者。 18年企业信息化建设从业人员,熟悉微服务等多种分布式架构,负责过大型企业多种业务领域信息化平台建设建设及企业技术中台落地实践; 关于 Dante Cloud Dante Cloud 是一款遵循 SpringBoot 编程思想,高度模块化和可配置

2024-04-04

4.18.0-jdk17 更新简介: - feat(lamp-web-pro-soybean): 基于 [soybean-admin](https://github.com/soybeanjs/soybean-admin)、[fast-crud](https://github.com/fast-crud/fast-crud) 封装的全新前端,架子基本成型。 - feat(lamp-web): 前端页面右下角,新增本页源码按钮(

2022-08-16

4.10.0 - 正式版 更新详情: build - lamp-databases 不在依赖数据库驱动,改到 lamp-database-mode 依赖 feat - 支持 Oracle - 支持 Sql Server - 调整 PDManer 源文件,支持导出三大数据库脚本 - DefGenTableColumn 增加 digit(小数位)字段,用

2023-08-19

新详情: 近期在基于 4.14.x 录制视频,新功能开发和版本发布速度会延后,4.14.x 系列主要以优化功能和修复 bug 为主。 build tencentcloud-sdk-java.version>3.1.831 feat (lamp-base): 消息发送 是否成功由实现类自行处理 (lamp-base):

2023-01-17

若依 Cloud 微服务版本 v3.6.2 已发布,更新日志: 重置时取消部门选中 新增返回警告消息提示 忽略不必要的属性数据返回 修改参数键名时移除前缓存配置 开启TopNav没有子菜单隐藏侧边栏 删除fuse无效选项maxPatternLen

2022-10-01

若依 Cloud 微服务版本 v3.6.1 已发布,更新日志: 数据逻辑删除不进行唯一验证 支持多权限字符匹配角色数据权限 页面内嵌iframe切换tab不刷新数据 新增密码最大错误次数/锁定时间 登录日志新增解锁账户功能 通用

2024-02-20

升级内容 新增 keyPrefixWithDsName 参数,给缓存 Key 增加数据源名称前缀,默认 false 新增 Global.getClearCacheTime() 方法,业务自己管理是否需要更新缓存 新增 DataSourceHolder.DYNAMIC 动态数据源常量,含义与 EMPTY 相同 新增 js.aj

2023-09-09

新详情: 近期在基于 4.14.x 录制视频,新功能开发和版本发布速度会延后,4.14.x 系列主要以优化功能和修复 bug 为主。 build spring-boot-starter-parent > 2.7.15 seata.version>1.7.1 hutool.version>5.8.21 druid.version>1.2.19 mybatis.versio