JFinal 4.9.02 发布,App&Coffee 重磅上线

2020年10月13日

   每年国庆长假 jfinal 都会升级一个新版本,今年也不例外。前几天有事被耽误,今天正式推送新版本通知。

   这次国庆同时升级的项目有 jfinal、jfinal-undertow、jfinal-weixin、enjoy、activerecord。

   在国庆假期已全部推送到了 maven 中心库,可以直接升级使用。

   本次升级清扫了积累了很长的待开发列表,大多来自同学们的需求与反馈。新版本以细致打磨为主,但也不乏一些有意思的功能。

1、enjoy 新增对中文表达式、变量名、函数名支持

   这个需求在底层就是对中文标识符的支持,没想到提出这个需求的同学还挺多,光是 jfinal 俱乐部就有将近 10 人提出想要这个功能。

   虽然我自己感觉这需求挺奇葩,但真实需求就必须要打破个人主观偏见,为用户创造价值更重要。

   好在 jfinal 极简设计之下,添加这个功能也就 19 行代码的事,10 分钟内打完收工,添加中文标识符支持以后,可以这么来用了:

#(美女.身高)

#define 中文函数名在此()
   #(中文变量名在此)
#end

2、#number 指令、算术运算默认使用四舍五入

   老版本的舍入默认用的银行家舍入法,这个在欧美用得较多,在国内四舍五入用得多,所以这个功能很重要。

   此外,舍入方式可以配置,配置方法如下:

engine.setRoundingMode(RoundingMode);

3、#date 指令支持 LocalDateTime、LocalDate、LocalTime

   老版本的 #date 指令只支持 java.util.Date 及其子类,虽说自行扩展也很容易,但官方提供可以进一步节省你的时间专注业务开发。

   为了支持 LocalDateTime,索性对 com.jfinal.template.io.Writer 新增了针对 LocalDateTime 的 write 方法,这样便于在扩展 enjoy 指令时更方便处理 LocalDateTime。

4、ActionReporter 支持自定义扩展

   这个需求提出很久了,起初我一直认为这个仅用于开发模式时输出一些有利于开发效率的信息,所以没处理这个需求。

   但很多同学说他们将这个功能用于监控系统的运行情况,非常希望能自由扩展,好吧,加上。

   扩展很简单,继承 ActionReporter,然后配置:   

me.setActionReporter(ActionReporter);

  5、Prop、PropKit 对返回值进行 trim() 操作

   经过测试 key = value 格式的配置,对于等号两边的空格来说无论是否 trim(),结果是一样的。

   但如果 value 右侧有空格,则会成为值的一部分,这类配置错误很难被肉眼发现,这个打磨有一定的价值,以后可以放心大胆的在 value 后方留空格了。

6、enjoy 支持 reentrant

   这个需求绝大多数同学碰不到,目前为止也就一位同学有这个需求。简单来说就是有同学在模板渲染的过程之中再次获取一个新的模板进行渲染。由于 enjoy 内部有一个 ThreadLocal 的 buffer,所以 reentrant 的渲染会覆盖掉 buffer 中外层正渲染了一部分的数据。

7、JFinalJson 支持 reentrant

   情况与 enjoy 的 reentrant 相似。

8、改进 enjoy 中 Compressor 的压缩算法

   代码量减少了将近 50%,可读性更好,性能更高,压缩率更高,压缩 sql 模板格式更美观,sql 压缩配置方法:

activeRecordPlugin.getEngine().setCompressorOn(' ');

9、改进 RedirectRender 对 nginx 反向代理时的支持

   简单说就是 nginx 代理了 https,而 nginx 与应用之间走的是 http,这个改进可以让 redirect(...) 仍然重定向到 https 而非 http。

10、新增 TimeKit 用于简化 JDK 8 新增的时间 API

  JDK 8 处理时间的 API 虽然有很大进步,但用起来还是啰嗦,TimeKit 去除了一些中间步骤,让功能一步到位,触手可及。

   TimeKit 一直是用在具体的项目之中,用得多了干脆就转移到 jfinal 中来,独享不如共享。

11、Render 实现类添加 flush() 操作

    极少数同学反馈在有些部署场景之下,客户端接收不到数据,在 render 中添加 flush() 可解决。

   添加 flush() 解决上述问题的同时,还可以缩短客户端响应延迟,这个打磨有一定的价值,适应更复杂的部署环境。

12、enjoy buffer 默认值改为 1024

   老版本的默认值为 2048,buffer 大些性能会高点,但响应延迟也会高点,缩小为 1024 在高性能与低延迟上更平衡,仍是打磨。

 

   剩下还有 27 项细致打磨,为节省大家时间,在这就不一一细说了,在官网可以下载到完整的 changelog: https://jfinal.com

   比 jfinal 新版本发布重要得多的事情是 jfinal 社区计划很久的 App&Coffee 频道上线了。

   App&Coffee 全称是 Application And Coffee,简单说就是 jfinal 官方和俱乐部打造精致有用的 Application,有需要的同学可以通过给作者来一杯咖啡得到授权,称之为 "咖啡授权"。

   App&Coffee 承载了 jfinal 的生态梦想,最终能不能成,就看你是否愿意请作者喝杯咖啡了,写出好代码哪能没有咖啡加持 ^_^

   ONE MORE THING:为了进一步大幅度提升开发效率,jfinal 官方已经介入前端,打造一个 jfinal 极简风格的前端框架,前后端同时极速开发将成为现实。新鲜出炉的 jfinal-kit.js 极简前端框架已发布,伴随的第一个应用已经诞生。详情请移步:https://jfinal.com/app/1

   

展开阅读全文
8 收藏
分享
加载中
精彩评论
中文编程带感!用jfinal已经5年了,一直跟进最新骚操作,越来越好用了!回家创业也是第二年了,加油干!
2020-10-13 17:16
8
举报
已经使用7年多,几十个中小项目,最近开发的平台产品 终身制用户已经300成员 大部分是企业客户 JFInal一如既往的稳定高效 是我们敢打敢拼的后盾
2020-10-14 18:09
5
举报
詹总V5
2020-10-13 18:19
4
举报
#Jboot# 已经第一时间更新,波总 V5
2020-10-13 19:44
3
举报
不错,用起来了已经
2020-10-13 17:10
2
举报
最新评论 (34)
细心的波总,越来越细致。祝愿App&Coffee红红火火~~
2020-10-18 15:58
0
回复
举报
越来越好用
2020-10-15 07:39
1
回复
举报
骨灰级资深用户,多多支持啊
2020-10-15 12:48
0
回复
举报
已经使用7年多,几十个中小项目,最近开发的平台产品 终身制用户已经300成员 大部分是企业客户 JFInal一如既往的稳定高效 是我们敢打敢拼的后盾
2020-10-14 18:09
5
回复
举报
波总厉害了
2020-10-14 17:47
0
回复
举报
能否在进一步,干掉Controller内的注解,function等代码,使用类似JavaScript的json对象的初始化的方式来构建Controller的action,用java属性设置controller的属性.
2020-10-14 14:47
0
回复
举报
Controller 内的注解基本上只有 @Before、@Clear ,都是用于拦截器配置的

你说的那种类似于函数式编程,有不少的这种 java web 框架,基本上无人问津

风格不同,目标一样,使用习惯问题。jfinal 迭代 10 年,风格不能轻易变动,兼容性、学习成本、老用户习惯都很重要
2020-10-14 15:13
0
回复
举报
我希望@Beforre,@clear所指代的服务,不一定要用注解,用Controller自身就可以,直接重写Controller某个方法,在重写的方法体代码里面设置this.before=true。this.clear=true等代码就可以。

关于兼容问题,其实你可以不用考虑兼容问题,jfinal自带的Controller,action,拦截器也是基于jfinal内置某个自带的handler吧。但jfinal自带的Controller是多例的,感觉不太合适,你可以再新建一个内置新的handler来处理,不过这个研发成本,相当于新建一个Controller,Action,Action拦截器体系了
2020-10-14 15:27
0
回复
举报
在 controller 内使用 before、after 这种风格无法实现 Interceptor 的很多特性

兼容性极端重要,否则 java 开发者的用户量不可能这么大

controller 是否本单例,这个从本质上来说无法避免,controller 可以做成单例,这样就可以避免创建对象,从而提升性能。 但这样做必然会冒出来一个类似于 ActionContenxt 这样的东东承载 request、response、session 这类东东,所以为啥我说本质上无法避免

你可以看看别的让 controller 成为单例的框架,它是在另一个地方又绕回来了

最后,jfinal 为了避免创建 controller 来提升性能,其实是提供了一个 FastControllerFactory 的,可以这样用:
me.setControllerFactory(new FastController());

没有使用单例模式,而是使用了类似对象池的形式,化解了你的需求
2020-10-14 15:42
1
回复
举报
#EOVA# 3.6.1 已同步更新 4.9.02 安排^v^
2020-10-14 10:55
1
回复
举报
最近项目改造用到JFinal的多数据源动态切换和SQL模板,使代码精简了许多,灵活性大大提高👍👍👍
2020-10-14 08:54
1
回复
举报
用拦截器可以很方便实现数据源切换,业务代码对此是透明的,无需任何改变
2020-10-14 11:27
0
回复
举报
有范例讲解吗?
2020-10-15 11:10
0
回复
举报
标题不一致啊 差评 继续爽啊
2020-10-14 07:22
1
回复
举报
因为 App&Coffee 承载了 jfinal 的生态之梦,太重要了,所以一定要放在标题上
2020-10-14 11:27
0
回复
举报
开个玩笑
2020-10-14 19:12
0
回复
举报
C21
在使用过程中不断学习框架设计思想,探索jfinal框架本身未曾发现隐藏功能,集成项目上发挥Jfinal性能最大化。
2020-10-13 21:45
1
回复
举报
jfinal 隐藏功能比文档中的功能多得多,需求展开的过程能发现很多功能已经准备好
2020-10-13 22:33
1
回复
举报
C21
确实是这样子的,我在做项目一直探索jfinal这么设计还有多少性能未得到最大化的利用,有多少功能还未曾得到使用。
2020-10-14 09:22
0
回复
举报
向波总学习,一起进步
2020-10-13 21:22
1
回复
举报
感谢支持, tio 的 IM 做得相当不错
2020-10-13 22:31
0
回复
举报
更多评论
34 评论
8 收藏
分享
返回顶部
顶部