脚本组件

LiteFlow从v2.6.0开始支持脚本节点的创建。支持热刷新脚本,支持QLExpress和Groovy两种脚本的编写。

如何定义

脚本节点定义是在规则文件中,你需要做如下定义(这里以xml文件格式举例):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <flow>
  3. <nodes>
  4. <node id="s1" name="普通脚本" type="script">
  5. <![CDATA[
  6. a=3;
  7. b=2;
  8. slot.setData("s1",a*b);
  9. ]]>
  10. </node>
  11. <node id="s2" name="条件脚本" type="cond_script">
  12. <![CDATA[
  13. count = slot.getData("count");
  14. if(count > 100){
  15. return "a";
  16. }else{
  17. return "b";
  18. }
  19. ]]>
  20. </node>
  21. </nodes>
  22. <chain name="chain1">
  23. <then value="a,b,c,s1"/>
  24. </chain>
  25. <chain name="chain2">
  26. <then value="d,s2(a|b)"/>
  27. </chain>
  28. </flow>

要注意的是,type分为两种:scriptcond_script,分别对应普通脚本组件和条件脚本组件。

你可以在示例的位置进行编写动态脚本来处理业务逻辑。

如何与java变量进行交互

因为LiteFlow组件与组件之间的数据交互都在SLOT中,所以在脚本语言中,内置了关键字slot,你可以通过slot这个关键字来获取,设值任何数据。

普通脚本组件,脚本中无需返回值。只需要把结果设置到SLOT即可(这和普通的java编写的组件是一致的)

而条件脚本节点,则需要在脚本中返回条件路由到的节点ID,返回String类型(这也和java编写的组件是一致的)

如何选择脚本框架

LiteFlow采用SPI机制进行选择脚本框架来动态编译你的脚本。

QLExpress脚本,你需要额外依赖:

  1. <dependency>
  2. <groupId>com.yomahub</groupId>
  3. <artifactId>liteflow-script-qlexpress</artifactId>
  4. <version>2.6.0</version>
  5. </dependency>

Groovy脚本,你需要额外依赖:

  1. <dependency>
  2. <groupId>com.yomahub</groupId>
  3. <artifactId>liteflow-script-groovy</artifactId>
  4. <version>2.6.0</version>
  5. </dependency>

你只需要依赖相应的脚本框架即可,SPI会动态选择你依赖的脚本框架进行编译解析你的脚本

脚本运行性能如何

LiteFlow对所有的脚本在启动时就进行了预编译,所以每次执行时无需编译的,运行性能和java不会差别太多。

如何动态刷新脚本

提供了编码形式的刷新,刷新后可以重新编译脚本

  1. ScriptExecutorFactory.loadInstance().getScriptExecutor().load(nodeId, script);