升级到2.8.X说明
此文档仅适用于从2.7.X升级到2.8.X的指南。
如果你现在使用的版本是2.6.X,那么在升级到2.8.X之前,请先看升级到2.7.X说明。
2.8.X是一个里程碑系列。设计了全新的EL形式的规则表达式。但是也保持了对原有规则的支持,使得以前版本的LiteFlow能够以相对平滑的方式迁移到新版本。
# 🌼2.7.X迁移到2.8.X版本注意事项
# 第一部分
如果你不打算更换规则表达式的形式,你只需要做以下几点就可以了:
原先的
NodeCondComponent
现在更名成为了NodeSwitchComponent
,中文表达也从条件组件
变更成了选择组件
。并且要实现的方法也从
processCond
变更成了processSwitch
。对于脚本组件来说,以前的
脚本条件组件
定义的type是cond_script
,现在变成了switch_script
,中文表达也从脚本条件组件
变更成了脚本选择组件
。对于声明式组件来说,以前的
@LiteflowCondCmpDefine
更名成了@LiteflowSwitchCmpDefine
,方法上的定义@LiteflowMethod(LiteFlowMethodEnum.PROCESS_COND)
现在变更成了@LiteflowMethod(LiteFlowMethodEnum.PROCESS_SWITCH)
。原先获取上下文的方式是在组件中调用
this.getContextBean()
,在2.8.X中需要传入上下文的Class。为什么多传入一个Class呢,因为2.8.X中支持了多上下文的全新特性。你取上下文需要改成以下形式:
//推荐以下用法 YourContextBean contextBean = this.getContextBean(YourContextBean.class); //2.8.X支持了多上下文的特性,如果你的上下文只有一个的话,用以下语句则和上面等价 YourContextBean contextBean = this.getFirstContextBean();
LiteflowResponse
对象原先需要定义成泛型的形式,现在不需要泛型了。直接写就可以了。Slot也是,没有泛型了,请在你的代码中去掉泛型。如果你的代码实现过LiteFlow的全局组件拦截接口
ICmpAroundAspect
,也请去掉相关泛型。新版本中去除了
FlowExecutor
直接返回数据上下文的用法,统一用LiteflowResponse
类来接收。
# 第二部分
如果你想用新的规则表达式,除了第一部分要做以外,还要注意第二部分的变更
你需要学习EL的表达语法,请参照EL规则的写法。你需要替换所有的规则表达式写法。
你需要把规则文件名改成
xxxx.el.xml
的形式(如果不改名,还是会按以前的方式去解析,可能会报错)。如果你的规则文件是通过自定义配置源或者zk加载的,原先的写法是:
#自定义配置源 liteflow.rule-source=xml:com.yomahub.liteflow.test.parsecustom.parser.CustomXmlFlowParser #zk加载 liteflow.rule-source=xml:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
现在需要把
xml:
变成el_xml
,json和yaml也是同理。#自定义配置源 liteflow.rule-source=el_xml:com.yomahub.liteflow.test.parsecustom.parser.CustomXmlFlowParser #zk加载 liteflow.rule-source=el_xml:127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
如果你使用过LiteFlow的被动平滑刷新功能,并且规则已经变更成了EL表达式形式,以前的写法是:
FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_XML, newContent); FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_JSON, newContent); FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_YML, newContent);
现在需要更换
FlowParserTypeEnum
的枚举,变成这样:FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_EL_XML, newContent); FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_EL_JSON, newContent); FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_EL_YML, newContent);
如果你的规则是基于代码动态构建的。现在的动态构建API更加简单,请参照用代码动态构造规则。