2.12.0升级指南
v2.12.0并不是向下兼容的版本。需要使用者改一些东西,但是这不会花费使用者太多的时间。
v2.12.0最大的不兼容点在于去除了NodeWhileComponent
,NodeIfComponent
,NodeBreakComponent
三个组件,全部合并成为了布尔组件,即NodeBooleanComponent
。
也就是说,使用者涉及到的这三个组件,都需要把超类换成NodeBooleanComponent
。
既然是合三为一了,那现在你定义一个布尔组件:
@LiteflowComponent("x")
public class ECmp extends NodeBooleanComponent {
@Override
public boolean processBoolean() throws Exception {
// do your biz
return true;
}
}
这个组件可以用在IF
,WHILE
,BREAK
中了
<chain id="chain1">
IF(x, a, b);
</chain>
<chain id="chain2">
WHILE(x).DO(THEN(a,b));
</chain>
<chain id="chain3">
FOR(f).DO(THEN(a,b)).BREAK(x);
</chain>
如果你用了声明式组件,那么相应的@LiteflowMethod
标注里的一些枚举都需要改变:
类声明式:
@LiteflowComponent("a")
public class DeclECmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeType = NodeTypeEnum.BOOLEAN)
public boolean yourMethodName(NodeComponent bindCmp) throws Exception {
//do your biz
}
}
方法级别声明式:
@LiteflowComponent
public class CmpConfig {
...
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeId = "a", nodeType = NodeTypeEnum.BOOLEAN)
public boolean yourMethodName1(NodeComponent bindCmp) throws Exception {
//do your biz
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeId = "b", nodeType = NodeTypeEnum.BOOLEAN)
public boolean yourMethodName2(NodeComponent bindCmp) throws Exception {
//do your biz
}
...
}
如果你用了脚本组件,那么相应的script中的type
类型也要改:
<flow>
<nodes>
<node id="s1" type="boolean_script" language="groovy">
<![CDATA[
// do your biz
]]>
</node>
</nodes>
<chain id="chain1">
THEN(a, b, s1);
</chain>
</flow>
提示
如果你把脚本存在存储器中,比如db,etcd中,那么相应的type都需要变更。
值得注意的是,zk,etcd,apollo,redis这种存储插件中由于type是写在节点的key中的,所以type的变动,意味着key的变动。大家在升级时,如果符合这种情况的,千万不要忘掉这点。
全局参数中去除了parse-on-start
这个参数,这个参数现在被parse-mode
给取代了。
这个parse-mode
一共有三种值:
设置值 | 含义 |
---|---|
PARSE_ALL_ON_START | 启动时解析所有的规则,不配置默认就是这个值 |
PARSE_ALL_ON_FIRST_EXEC | 启动时不解析规则,但是第一次执行任意规则时,解析所有的 |
PARSE_ONE_ON_FIRST_EXEC | 启动时不解析规则,但是第一次执行相关规则时,只解析对应的规则 |
原先的parse-on-start=true
就相当于parse-mode=PARSE_ALL_ON_FIRST_EXEC
,新版其实推荐用PARSE_ONE_ON_FIRST_EXEC
。
关于这部分的详细解释,请看官网文档中的元数据管理 -> 启动不检查规则
。
如果你使用了链路继承特性,那么原先的占位符是单花括弧{x}
,现在变成了双花括弧{{x}}
,此改动目的是为了和开发者自有的占位符不冲突。
具体使用方式可以参考官网文档中的高级特性 -> 链路继承
。