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}},此改动目的是为了和开发者自有的占位符不冲突。
具体使用方式可以参考官网文档中的高级特性 -> 链路继承。
 
 

