🌈What's New In LiteFlow v2.13.1?
# 前言
新的版本v2.13.1发布啦!
上次发布是2月底,到现在也差不多有一个多月了。这一个月我非常忙碌,闲暇之余,根据社区的反馈修复了大量的2.13.0遗留的问题。
这个版本总共更新了10个Issue。完全兼容v2.13.0版本,可以放心升级。
在这个版本中,新推出的特性就一个,即"表达式取参&设值",这个特性非常之实用,可以完全解决组件和上下文的耦合问题。
下面就来说说这个新特性。
# 表达式取参&设值
在LiteFlow的设计理念中,组件之所以能随意编排,其核心思想就两个:
1)组件的结构统一,消除了代码片段之间的强依赖
2)把组件和组件之间的逻辑依赖转化为了组件对数据的依赖,而数据则存储在上下文中。
但是很多社区同学在复杂场景使用的时候,则往往会碰到一个问题,想设计一个公用组件供所有链路使用,每个链路有单独的上下文结构。这时候问题来了,这个公用组件到底该引用哪个上下文呢。貌似无论引用哪个上下文,都使这个公用组件有了一定的耦合性。不再那么通用。
之前我在设计LiteFlow上下文的时候,也考虑过这个问题。之前我的推荐是用上下文继承来解决,公用组件用BaseContext,其他业务所用的上下文都继承这个BaseContext,这样公用组件只和BaseContext这一个进行耦合。这样一定程度上可以解决问题。
但是这个方式需要开发者需要很高的抽象能力,而有些实际业务场景,没那么好抽象。所以LiteFlow后来推出了多上下文功能,上下文之间不用继承,单独给公用组件分配一个上下文。进行调用的时候每次都带有这个公用上下文。
这样的好处是上下文物理隔绝,但缺点是,如果业务复杂,公用组件很多,每次调用的时候需要传入很多上下文。
再后来LiteFlow推出了上下文参数注入这个功能,其核心也是利用表达式来取参。但是这个功能有两点限制,第一是只能在声明式组件中使用,第二则是表达式只能用来取参。设值还得取到上下文。
所以很多人实际用这个特性,都是直接注入上下文。等于说这个特性并没有解耦组件和上下文,只是让开发者省了每次取上下文那一句代码。
所以我一直在想,有没有更加简单,通用 ,无脑的方式来达成这一目的。
所以在吸取了之前所有设计的优缺点后,这次的方案应该是一个终极设计方案了。它具有以下优点:
1.利用表达式可以取参,也可以设值,全程不涉及任何上下文对象
2.可以单层获取,也可以深层获取,完全靠表达式
3.完全不用关心从哪个上下文取,会自动匹配
4.表达式语法也极其简单,但是可以变化出非常多的组合
自此,组件和上下文可以完全解耦。真正做到,组件之中无一是上下文,组件之中无一又不是上下文。
具体怎么用,发版公告中不介绍,因为的确篇幅会比较长。可以阅读官网文档中 上下文->用表达式获取上下文参数
这一章来获得使用方法。
# 完整更新列表
特性 #IBW9PC 上下文表达式搜索&设置,摆脱对上下文的依赖
https://gitee.com/dromara/liteFlow/issues/IBW9PC
增强 #IBWDSA bind关键字机制增强
https://gitee.com/dromara/liteFlow/issues/IBWDSA
增强 #IBXBVS 给每个chain的运行加入一个runtimeId属性
https://gitee.com/dromara/liteFlow/issues/IBXBVS
增强 #IBW9UT 升级liquor到1.4.0,获取了更好的性能提升
https://gitee.com/dromara/liteFlow/issues/IBW9UT
修复 #IBVGGT 13版本groovy脚本中使用_meta.cmp.setIsEnd(true)结束流程不生效
https://gitee.com/dromara/liteFlow/issues/IBVGGT
修复 #IBV4NA 13版本parse-mode: PARSE_ONE_ON_FIRST_EXEC和SQL轮询查询刷新数据库一起使用不刷新
https://gitee.com/dromara/liteFlow/issues/IBV4NA
修复 #IBUZEP 2.13.0中刷新FOR(数字)的循环时无法刷新
https://gitee.com/dromara/liteFlow/issues/IBUZEP
修复 #IBTZIX bind关键字无法反序列化LocalDate类型
https://gitee.com/dromara/liteFlow/issues/IBTZIX
修复 #IBQVO1 pg数据库启动报错问题,存在反引号
https://gitee.com/dromara/liteFlow/issues/IBQVO1
修复 #IBMPPW 组件参数中含字符单英文引号"'"时,在构建EL时会解析失败
https://gitee.com/dromara/liteFlow/issues/IBMPPW