LiteFlow LiteFlow
💒首页
  • v2.10.1(当前版本)
  • What's New

    • What' s New In LiteFlow v2.10.1?
  • 历史版本

    • v2.9.X
    • v2.8.X
    • v2.7.X
    • v2.6.X
  • 升级指南

    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
❓问答
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
加入群聊
用户
  • TLog-轻量级的分布式日志追踪神器 (opens new window)
  • ERD ONLINE-开箱即用的数据库建模、产品版本管理软件 (opens new window)
  • Forest-更轻量、更简单实用的HTTP客户端框架 (opens new window)
Gitee (opens new window)
Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)
💒首页
  • v2.10.1(当前版本)
  • What's New

    • What' s New In LiteFlow v2.10.1?
  • 历史版本

    • v2.9.X
    • v2.8.X
    • v2.7.X
    • v2.6.X
  • 升级指南

    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
❓问答
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
加入群聊
用户
  • TLog-轻量级的分布式日志追踪神器 (opens new window)
  • ERD ONLINE-开箱即用的数据库建模、产品版本管理软件 (opens new window)
  • Forest-更轻量、更简单实用的HTTP客户端框架 (opens new window)
Gitee (opens new window)
Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)
  • 🍤LiteFlow简介
  • 🍓项目特性
  • 🍟快速开始(Hello world)

    • 🍄说明
    • 🌿Springboot场景安装运行

      • 🧬依赖
      • ⚙️配置
      • 🛫执行
    • 🌱Spring场景安装运行

      • 🧬依赖
      • ⚙️配置
      • 🛫执行
    • 🌵其他场景安装运行

      • 🍄说明
      • 🧬依赖
      • ⚙️配置
      • 🛫执行
  • 🍢配置项

    • 🍄说明
    • 🌿Springboot下的配置项
    • 🌱Spring下的配置项
    • 🌵其他场景代码设置配置项
  • 🗂规则文件

    • 📔规则文件格式
    • 📕本地规则文件配置
    • 📗ZK规则文件配置源
    • 📘SQL数据库配置源
    • 📋Nacos配置源
    • 🗄Etcd配置源
    • 📜Apollo配置源
    • 📙自定义配置源
  • 🔗常规组件

    • 📎普通组件
    • ✂️选择组件
    • 📌条件组件
    • 🧬次数循环组件
    • ⛓条件循环组件
    • ⌛️迭代循环组件
    • 🧿退出循环组件
  • 🧩EL规则的写法

    • 🍄说明
    • 🌴串行编排
    • 🎋并行编排
    • 🌾选择编排
    • 🌵条件编排
    • 🌳循环编排
    • 🎃捕获异常表达式
    • 🍁使用子流程
    • 🍂使用子变量
    • 💐复杂编排例子
    • 🌻关于分号
    • 🌰关于注释
    • 🐚组件名包装
    • 🔆验证规则
  • 🌮数据上下文

    • 🍄说明
    • 🌯数据上下文的定义和使用
    • 🪶用初始化好的上下文传入
  • 🛩执行器

    • 🍄说明
    • 🎡执行方法
    • 🎢流程入参
    • 🎈LiteflowResponse对象
  • 🍋脚本组件

    • 🍫选择脚本语言
    • 🍕定义脚本组件
    • 🍱多脚本语言混合共存
    • 🌯文件脚本的定义
    • 🍣与Java进行交互
    • 🍘动态刷新脚本
  • 🍇声明式组件

    • 🥭什么叫声明式组件
    • 🧅类级别式声明
    • 🥥方法级别式声明
  • 🎲用代码动态构造规则

    • 🍄说明
    • 🎯如何构造
      • 什么时候构造
      • 构造Node
      • 构建一个Chain
      • 销毁一个Chain
  • 🎨高级特性

    • 🍒前置和后置组件
    • 🍌本地规则文件监听
    • 🥠替补组件
    • 🍉组件参数
    • 🍑组件别名
    • 🍍组件标签
    • 🥝组件事件回调
    • 🥑隐式子流程
    • 🍕私有投递
    • 🍣组件重试
    • 🍖平滑热刷新
    • 🍪组件切面
    • 🍡步骤信息
    • 🧊异常
    • 🧇打印信息详解
    • 🧁自定义请求Id
    • 🌭不同格式规则加载
    • 🥗异步线程池自定义
    • 🍿自定义组件执行器
    • 🍥简单监控
    • 🧉XML的DTD
  • ⛱测试用例以及示例

    • 🪁测试用例
    • 🪀DEMO案例
  • 🪂性能表现
  • v2.10.X文档
  • 🎲用代码动态构造规则
铂赛东
2022-07-02
目录

🎯如何构造

要说明的是,构造模式和规则配置模式,其实并不是只能二选一。他们既可以单独使用,也可以结合起来使用,并不冲突。事实上,即便是规则配置模式,底层也使用了构造模式。所以,您随意就是。

# 什么时候构造

建议在项目启动时构造,以下只需要构造一次。千万不要每次执行的时候都去构造!!!

# 构造Node

提示

你可以像以下那样构造一个普通的Node,当然在spring/springboot环境,大多数情况你无需去构建一个Node,因为只要你的组件上标有@Component/@LiteflowComponent,并且被scan到的话,组件会自动注册。

我这里只是告诉您,可以这样去通过代码去构造,如果你的组件是动态代理类而不是一个静态存在的java类,或是脚本节点,这样的构建就显得很有意义了。

关于脚本节点的概念,可以查看脚本组件

//构建一个普通组件
LiteFlowNodeBuilder.createCommonNode().setId("a")
                .setName("组件A")
                .setClazz("com.yomahub.liteflow.test.builder.cmp.ACmp")
                .build();

//构建一个普通条件组件
LiteFlowNodeBuilder.createSwitchNode().setId("a")
                .setName("组件A")
                .setClazz("com.yomahub.liteflow.test.builder.cmp.ACmp")
                .build();

//构建一个脚本组件
LiteFlowNodeBuilder.createScriptNode().setId("a")
                .setName("组件A")
                .setScript("你的脚本")
                .build();

//构建一个脚本条件组件
LiteFlowNodeBuilder.createScriptSwitchNode().setId("a")
                .setName("组件A")
                .setScript("你的脚本")
                .build();

//构建一个脚本组件,从file载入脚本
LiteFlowNodeBuilder.createScriptNode().setId("a")
                .setName("组件A")
                .setFile("xml-script-file/s1.groovy")
                .build();

提示

这里的节点类,不需要你去声明@LiteflowComponent或者@Component,如果项目是spring体系的话,LiteFlow框架会自动的把节点类注入到spring上下文中。

所以你仍旧可以在这个类里使用@Autowired和@Resource等等之类的spring任何注解。

# 构建一个Chain

你可以像以下那样构造一个chain,由于和规则定义的没冲突。你也可以和规则文件结合起来用。当build的时候,如果没有则添加,如果有则修改。

LiteFlowChainELBuilder.createChain().setChainName("chain2").setEL(
  "THEN(a, b, WHEN(c, d))"
).build();

值得提一下的是,由于用构造模式是一个链路一个链路的添加,如果你用了子流程,如果chain1依赖chain2,那么chain2要先构建。否则会报错。

但是经过上面几章的学习,其实一个EL表达式完全可以表示一个复杂的流程,即便不能也可以用子变量来优化流程。

# 销毁一个Chain

LiteFlow中允许你手动运行以下代码来销毁一个流程:

FlowBus.removeChain("你的流程ID")
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/17, 01:44:42
🍄说明
🍒前置和后置组件

← 🍄说明 🍒前置和后置组件→

Theme by Vdoing | Copyright © 2020-2023 铂赛东 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式