Jboot v3.14.3 发布,基于 JFinal 的微服务框架
Jboot 一个更简单的分布式、微服务框架。
Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐生活。
支持 JDK8~JDK17。
Jboot v3.14.3 主要是优化细节,并新增了一个 JSON 解析工具类 JsonUtil,用于解析 Json 数据,可能是市面上最好用的 Json 解析工具。Talk is cheap...
假设 JSON 内容如下:
{
"array": [
1,
2,
3
],
"type": true,
"number": 123,
"users": [
{
"id": 1,
"nickname": "Michael"
},
{
"id": 2,
"nickname": "Jean"
}
],
"key1": {
"key2": "welcome to WWW.CodeFormat.CN"
}
}
Boolean type = JsonUtil.getBool(json,"type");
//type == true
BigInteger n = JsonUtil.getBigInteger("number")
// n == 123
String[] array = JsonUtil.get(json,"array",String[].class)
//array == ["1","2","3"]
int[] array = JsonUtil.get(json,"array",int[].class)
//array == [1,2,3]
Map map = JsonUtil.get(json,"object",Map.class)
//map == {"a":"b","c":"d","e":1}
int x = JsonUtil.getInt(json,"array[1]");
// x == 2
String key = JsonUtil.getString(json,"key1.key2");
// key == "welcome to WWW.CodeFormat.CN"
User[] users = JsonUtil.get(json,"users",User[].class)
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]
List<User> users = JsonUtil.get(json,"users",new TypeDef<List<User>>())
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]
Set<User> users = JsonUtil.get(json,"users",new TypeDef<Set<User>>())
// users == [{"id":1,"nickname":"Michael"},{"id":2,"nickname":"Jean"}]
Integer[] userIds = JsonUtil.get(json,"users.id",Interger[].class)
//userIds == [1,2]
Integer user1Id = JsonUtil.getInt(json,"users[0].id")
//user1Id == 1
List<String> nicknames = JsonUtil.get(json,"users.nickname",new TypeDef<List<String>>())
// users == ["Michael","Jean"]
Jboot v3.14.3 更新内容如下:
- 新增:注解 @Table(datasource="xxx") 新增对数据源的配置支持
- 新增:添加 jboo.app.listenerPackage 配置支持,用于只扫描哪些包的 listener
- 新增:Informix 数据库方言,感谢 @xujianxie 同学
- 新增:JbootModel 新增 findByIdWithoutCache() 方法
- 新增:新增 JbootModel 的 CPI 类,用于开放保护方法
- 新增:Nacos 远程配置中心添加多实例的配置支持
- 新增:网关拦截器 GatewayConfig.interceptors 添加 SPI 名称配置的支持
- 新增:JsonUtil.java 方便解析 Json 数据
- 优化:ValidUtil.java,支持在非自定义消息的时候输出拦截的列名
- 优化:ClassScanner.java 默认关闭 Class 扫描信息在控制台输出
- 优化:修改缓存拦截器的默认权重为 100,当前情况下拦截器在最后执行
- 优化:完善 JbootJson 更多的代码注释
- 优化:优化 JbootConfigManager.java 代码,对添加 key 进行 trim()
- 优化:进一步完善 jboot.properties 文件存放位置的探测
- 优化:单元测试移除 mockHandler
- 优化:DAO.findFirstByColumn(),当传入 null 应抛出错误,防止查询出错误的数据
- 优化:rabbitmq.queueDeclareDurable 的配置默认设置为 false
- 优化:对 QuietlyUtil 的方法进行重命名优化
- 优化:ValidErrorRender 输出的 message 不带有 fieldName 信息
- 优化:升级 Jfinal 等依赖到最新版本
- 优化:JbootModel.findByColumn 当传入 null 值 value 时,直接返回 null
- 优化:Model 保存和之前版本一致的行为,只允许绑定到一个数据源
- 优化:当 Model 配置指定数据源,但数据源不存在的时候,给出更为明确的错误提示
- 优化:Rabbitmq 添加自由开启队列和广播的开关,默认全部开启
- 优化:重构 CORS 模块,使之代码可以用户模块里进行 "复用"
- 修复: HttpUtil 在 put 请求时,某些情况下无法正常提交数据的问题
- 修复:@Cacheput() 注解在 Controller 上无效的问题
Jboot 开发文档:
同时,Jboot 官方也推出了收费的、企业级快速开发框架 JbootAdmin (如下图所示),真诚的为各位开发者提供一站式、保姆式服务。请咨询海哥。
更多关于 JbootAdmin 请参考:http://jboot.io/jbootadmin/feature.html
Maven 依赖:
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>3.14.3</version>
</dependency>
Hello World:
@RequestMapping("/")
public class HelloWorld extends JbootController {
public void index(){
renderText("hello world");
}
public static void main(String[] args){
JbootApplication.run(args);
}
}
