Liteflow基础
1.组件
1.1 继承式组件
1.1.1 普通组件
- 组件id命名:不能以数字开头,中间不能有运算符号的出现
- 继承NodeComponent,可用于THEN和WHEN等关键字
- 实现process方法
1.1.2 选择组件
- 继承NodeSwitchComponent
- 实现processSwitch方法。
@LiteflowComponent("sa")
public class switchCompent extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
System.out.println("SAcomp executed!");
return "c";
}
}
1.1.3 布尔组件
- 继承NodeBooleanComponent
- 实现processBoolean
@LiteflowComponent("ba")
public class booleanCompent extends NodeBooleanComponent {
@Override
public boolean processBoolean() throws Exception {
//do your biz
return true;
}
}
1.1.4 次数循环组件
- 继承NodeForComponent,需要实现processFor
@LiteflowComponent("fa")
public class forCompent extends NodeForComponent {
@Override
public int processFor() throws Exception {
// 循环次数
return 2;
}
}
FOR(fa).DO(THEN(a, b));
1.1.5 迭代循环组件
- 继承NodeIteratorComponent,需要实现processIterator
@LiteflowComponent("ia")
public class iteratorCompent extends NodeIteratorComponent {
@Override
public Iterator<?> processIterator() throws Exception {
List<String> list = ListUtil.toList("jack", "mary", "tom");
return list.iterator();
}
}
ITERATOR(ia).DO(THEN(a, b));
1.2 声明式组件
不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。
1.2.1 类级别组件
- 参数必须传入NodeComponent bindCmp这个参数,而且必须是第一个参数。
- 方法的返回值要和继承式组件里的返回值一致
@LiteflowComponent("c")
public class CCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeType = NodeTypeEnum.COMMON)
public void processAcmp(NodeComponent bindCmp, String str) {
System.out.println("ACmp executed!");
}
}
1.2.2 方法级别式声明
- 加nodeId参数。相同的组件的方法,都标识成一样的nodeId即可。
@LiteflowComponent
public class CmpConfig {
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
public void processA(NodeComponent bindCmp) {
...
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
public boolean isAccessA(NodeComponent bindCmp){
...
}
@LiteflowMethod(value = LiteFlowMethodEnum.ON_SUCCESS, nodeId = "a", nodeType = NodeTypeEnum.COMMON)
public void onSuccessA(NodeComponent bindCmp){
...
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
public boolean processF(NodeComponent bindCmp) {
...
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
public boolean isAccessF(NodeComponent bindCmp){
...
}
@LiteflowMethod(value = LiteFlowMethodEnum.ON_SUCCESS, nodeId = "f", nodeType = NodeTypeEnum.BOOLEAN)
public void onSuccessF(NodeComponent bindCmp){
...
}
}
2.El规则
2.1 串行编排
<chain name="chain1">
THEN(a, b, c, d);
SER(a, b, c, d);
</chain>
2.2 并行编排
<chain name="chain1">
WHEN(a, b, c);
PAR(a, b, c);
</chain>
- WHEN(b, c, d).ignoreError(true): 忽略错误
- .any(true): 任一条分支先执行完即忽略其他分支
- .must(b, c): 指定需等待执行的任意节点
2.3 选择编排
SWITCH(a).to(b, c, d);
SWITCH(x).TO(a, b, c).DEFAULT(y): 默认选择到y
- id语法:
SWITCH(b).to(
c,
THEN(d, e).id("t1")
)
@Override
public String processSwitch() throws Exception {
//do your biz
return "t1";
}
- tag语法:
SWITCH(b).to(
c,
THEN(d, e).tag("t1")
),
@Override
public String processSwitch() throws Exception {
return "tag:t1";
//以下这种也是可以的
return ":t1";
}
2.4 条件编排
IF(x, a).ELSE(b);
IF(x, a, b); // 等价
2.5 循环编排
<chain name="chain1">
FOR(f).DO(THEN(a, b)).BREAK(c); // c为布尔组件
WHILE(w).DO(THEN(a, b)); // 布尔组件
ITERATOR(x).DO(THEN(a, b));
</chain>

浙公网安备 33010602011771号