├── .github └── workflows │ └── build.yml ├── .gitignore ├── LICENSE ├── README.MD ├── docs ├── .vuepress │ ├── components │ │ └── Notice.vue │ ├── config.js │ ├── config │ │ ├── adv.js │ │ ├── en │ │ │ └── nav.js │ │ ├── head.js │ │ ├── htmlModules.js │ │ ├── nav.js │ │ ├── plugins.js │ │ └── themeConfig.js │ ├── enhanceApp.js │ ├── plugins │ │ └── love-me │ │ │ ├── index.js │ │ │ └── love-me.js │ ├── public │ │ ├── img │ │ │ ├── Gitee-red.svg │ │ │ ├── Github-blue.svg │ │ │ ├── arch.svg │ │ │ ├── bg-dark.png │ │ │ ├── bg-light.png │ │ │ ├── bg-read.png │ │ │ ├── chat-group.png │ │ │ ├── donate │ │ │ │ ├── LF-Tshirt.png │ │ │ │ ├── ai4u-banner.png │ │ │ │ ├── apifox-banner.png │ │ │ │ ├── apifox.png │ │ │ │ ├── chicheng-banner.png │ │ │ │ ├── chicheng.png │ │ │ │ ├── erd.png │ │ │ │ ├── fb-banner.png │ │ │ │ ├── fb.gif │ │ │ │ ├── lfClub-banner.png │ │ │ │ ├── liruan-banner.jpg │ │ │ │ ├── liruan.png │ │ │ │ ├── maxkey-banner.png │ │ │ │ ├── maxkey.png │ │ │ │ ├── mdy-banner.png │ │ │ │ ├── mdy.png │ │ │ │ ├── misboot-banner.png │ │ │ │ ├── misboot.png │ │ │ │ ├── postcat-banner.gif │ │ │ │ ├── postcat-logo.png │ │ │ │ ├── snowy-banner.jpg │ │ │ │ ├── snowy.png │ │ │ │ ├── suzhong-banner-1.jpg │ │ │ │ ├── suzhong-banner-2.jpg │ │ │ │ ├── suzhong.jpg │ │ │ │ ├── yinmai-banner.png │ │ │ │ ├── yinmai.png │ │ │ │ ├── yuncheng-banner.png │ │ │ │ └── yuncheng.png │ │ │ ├── dromara │ │ │ │ ├── akali-logo.png │ │ │ │ ├── cubic-logo.png │ │ │ │ ├── dantecloud-logo.png │ │ │ │ ├── dromara-logo.png │ │ │ │ ├── dynamictp-logo.png │ │ │ │ ├── ee-logo.png │ │ │ │ ├── fastrequest-logo.png │ │ │ │ ├── forest-logo.png │ │ │ │ ├── gobrsasync-logo.png │ │ │ │ ├── goview-logo.png │ │ │ │ ├── hertzbeat-logo.png │ │ │ │ ├── hmily-logo.png │ │ │ │ ├── hutool-logo.png │ │ │ │ ├── imagecombiner-logo.png │ │ │ │ ├── jpom-logo.png │ │ │ │ ├── koalas-logo.png │ │ │ │ ├── liteflow-logo.png │ │ │ │ ├── maxkey-logo.png │ │ │ │ ├── mendmix-logo.png │ │ │ │ ├── myth-logo.png │ │ │ │ ├── northstar-logo.png │ │ │ │ ├── raincat-logo.png │ │ │ │ ├── satoken-logo.png │ │ │ │ ├── sureness-logo.png │ │ │ │ ├── tlog-logo.png │ │ │ │ └── xeasypdf-logo.png │ │ │ ├── example-web.png │ │ │ ├── favicon.ico │ │ │ ├── flow_example │ │ │ │ ├── e1.svg │ │ │ │ ├── e10.svg │ │ │ │ ├── e11.svg │ │ │ │ ├── e12.svg │ │ │ │ ├── e13.svg │ │ │ │ ├── e2.svg │ │ │ │ ├── e3.svg │ │ │ │ ├── e4.svg │ │ │ │ ├── e5.svg │ │ │ │ ├── e6.svg │ │ │ │ ├── e7.svg │ │ │ │ ├── e8.svg │ │ │ │ └── e9.svg │ │ │ ├── gstar.jpg │ │ │ ├── gvp.jpg │ │ │ ├── intro │ │ │ │ ├── 1.svg │ │ │ │ ├── 2.svg │ │ │ │ ├── 3.svg │ │ │ │ └── 4.svg │ │ │ ├── link │ │ │ │ ├── chicheng.png │ │ │ │ ├── dotnet-china-logo.png │ │ │ │ ├── flowlong-logo.png │ │ │ │ ├── gitcode-logo.svg │ │ │ │ ├── gitee-logo.png │ │ │ │ ├── hippo4j.png │ │ │ │ ├── layui-vue.png │ │ │ │ ├── misboot-logo.png │ │ │ │ ├── oschina-logo.png │ │ │ │ ├── pearAdmin-logo.png │ │ │ │ ├── rulego.png │ │ │ │ ├── snowy-logo.png │ │ │ │ ├── uniadmin-logo.png │ │ │ │ └── yuncheng-logo.png │ │ │ ├── liteflow-helper │ │ │ │ ├── 1.png │ │ │ │ └── 2.png │ │ │ ├── logo.png │ │ │ ├── logo.svg │ │ │ ├── logo2.png │ │ │ ├── members │ │ │ │ ├── author.png │ │ │ │ ├── m1.jpg │ │ │ │ ├── m10.png │ │ │ │ ├── m11.png │ │ │ │ ├── m2.png │ │ │ │ ├── m3.png │ │ │ │ ├── m4.png │ │ │ │ ├── m5.png │ │ │ │ ├── m6.png │ │ │ │ ├── m7.png │ │ │ │ ├── m8.png │ │ │ │ └── m9.png │ │ │ ├── monthpv.png │ │ │ ├── offical-wx.jpg │ │ │ ├── ppt │ │ │ │ ├── ppt1.gif │ │ │ │ ├── ppt2.gif │ │ │ │ └── ppt3.gif │ │ │ ├── pressure1.png │ │ │ ├── pressure2.png │ │ │ ├── pressure3.png │ │ │ ├── support.png │ │ │ ├── users │ │ │ │ ├── 58city.png │ │ │ │ ├── 863.png │ │ │ │ ├── aircase.png │ │ │ │ ├── alibaba.png │ │ │ │ ├── ams.png │ │ │ │ ├── ant.png │ │ │ │ ├── aotian.png │ │ │ │ ├── beast.png │ │ │ │ ├── bytedance.png │ │ │ │ ├── cetc.png │ │ │ │ ├── chediandian.png │ │ │ │ ├── chuangwei.png │ │ │ │ ├── deppon.png │ │ │ │ ├── dida.png │ │ │ │ ├── didi.png │ │ │ │ ├── diheng.png │ │ │ │ ├── dongruan.png │ │ │ │ ├── fabrique.png │ │ │ │ ├── fenqi.png │ │ │ │ ├── flypig.png │ │ │ │ ├── fs.png │ │ │ │ ├── gb.png │ │ │ │ ├── guokan.png │ │ │ │ ├── gygpt.png │ │ │ │ ├── haixin.png │ │ │ │ ├── haojing.png │ │ │ │ ├── hello.png │ │ │ │ ├── hhkj.png │ │ │ │ ├── hr.png │ │ │ │ ├── hst.png │ │ │ │ ├── huirong.png │ │ │ │ ├── hundsun.png │ │ │ │ ├── idadt.png │ │ │ │ ├── jiaxin.png │ │ │ │ ├── jinyou.png │ │ │ │ ├── jjb.png │ │ │ │ ├── jzh.png │ │ │ │ ├── kuaishou.png │ │ │ │ ├── kuayue.png │ │ │ │ ├── lann.png │ │ │ │ ├── lanwei.png │ │ │ │ ├── longhaida.png │ │ │ │ ├── meituan.png │ │ │ │ ├── mi.png │ │ │ │ ├── modernpay.png │ │ │ │ ├── nanbo.png │ │ │ │ ├── oppo.png │ │ │ │ ├── pinganjiankang.png │ │ │ │ ├── qingtuanshe.png │ │ │ │ ├── qmxc.png │ │ │ │ ├── ringleai.png │ │ │ │ ├── sdkj.png │ │ │ │ ├── sdtk.png │ │ │ │ ├── sf.png │ │ │ │ ├── shyk.png │ │ │ │ ├── sty.png │ │ │ │ ├── suixingfu.png │ │ │ │ ├── suzhong.png │ │ │ │ ├── sygf.png │ │ │ │ ├── tcsk.png │ │ │ │ ├── tefa.png │ │ │ │ ├── tonghuashun.png │ │ │ │ ├── vip.png │ │ │ │ ├── vivo.png │ │ │ │ ├── wxgreenstone.png │ │ │ │ ├── xiaohongshu.png │ │ │ │ ├── xiaohuodui.png │ │ │ │ ├── xiaonuo.png │ │ │ │ ├── xingyi.png │ │ │ │ ├── yiche.png │ │ │ │ ├── ykc.png │ │ │ │ ├── yuanquan.png │ │ │ │ ├── yueyang.png │ │ │ │ ├── yunding.png │ │ │ │ ├── yxt.png │ │ │ │ ├── zhenai.png │ │ │ │ ├── zhibang.png │ │ │ │ ├── zhiyou.png │ │ │ │ ├── zhongjin.png │ │ │ │ ├── zhongjing.png │ │ │ │ ├── zhongshan.png │ │ │ │ ├── zhuanzhuan.png │ │ │ │ └── zxw.png │ │ │ ├── whats_new │ │ │ │ ├── 2_11_0_1.png │ │ │ │ ├── 2_11_0_2.png │ │ │ │ └── 2_11_1_1.png │ │ │ └── zhishixingqiu.png │ │ ├── liteflow.dtd │ │ ├── markmap │ │ │ └── 01.html │ │ └── video │ │ │ ├── bg-dark.mov │ │ │ ├── bg-dark.mov.bak │ │ │ ├── bg-light.mov │ │ │ ├── bg-light.mov.bak │ │ │ ├── bg-read.mov │ │ │ └── bg-read.mov.bak │ ├── server.js │ └── styles │ │ ├── index.styl │ │ └── palette.styl ├── 00.en │ ├── 08.v2.11.X Document │ │ └── 010.Introduction.md │ └── index.md ├── 06.v2.13.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 030.🧁环境支持 │ │ ├── 005.环境支持说明.md │ │ ├── 010.JDK支持度.md │ │ ├── 020.Springboot支持度.md │ │ └── 030.Spring的支持度.md │ ├── 040.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 030.🍩Solon场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 040.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 050.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ ├── 035.Solon下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 060.🔗组件 │ │ ├── 010.🛍继承式组件 │ │ │ ├── 010.普通组件.md │ │ │ ├── 020.选择组件.md │ │ │ ├── 030.布尔组件.md │ │ │ ├── 040.次数循环组件.md │ │ │ ├── 055.迭代循环组件.md │ │ │ ├── 060.LiteflowComponent.md │ │ │ └── 070.组件内方法覆盖和调用.md │ │ └── 020.🎁声明式组件 │ │ │ ├── 010.什么叫声明式组件.md │ │ │ ├── 020.类级别式声明.md │ │ │ └── 030.方法级别式声明.md │ ├── 070.🧩EL规则 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 050.条件编排.md │ │ ├── 060.循环编排.md │ │ ├── 070.异步循环模式.md │ │ ├── 080.捕获异常表达式.md │ │ ├── 090.与或非表达式.md │ │ ├── 100.使用子流程.md │ │ ├── 110.使用子变量.md │ │ ├── 120.复杂编排例子.md │ │ ├── 130.前置和后置编排.md │ │ ├── 140.🍉组件参数语法 │ │ │ ├── 000.说明.md │ │ │ ├── 010.tag语法.md │ │ │ ├── 020.data语法.md │ │ │ └── 030.bind语法.md │ │ ├── 150.重试语法.md │ │ ├── 160.超时控制语法.md │ │ ├── 170.链路继承.md │ │ ├── 180.验证规则.md │ │ ├── 190.关于注释.md │ │ ├── 200.关于分号.md │ │ └── 210.组件名包装.md │ ├── 080.🌮上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ ├── 030.用初始化好的上下文传入.md │ │ ├── 040.给上下文设置别名.md │ │ ├── 050.上下文参数注入.md │ │ └── 060.用表达式获取上下文参数.md │ ├── 090.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 100.🍋脚本组件 │ │ ├── 005.脚本语言介绍.md │ │ ├── 010.🍫脚本语言种类 │ │ │ ├── 005.Java脚本引擎.md │ │ │ ├── 010.Groovy脚本引擎.md │ │ │ ├── 020.Javascript脚本引擎.md │ │ │ ├── 040.QLExpress脚本引擎.md │ │ │ ├── 050.Python脚本引擎.md │ │ │ ├── 060.Lua脚本引擎.md │ │ │ ├── 070.Aviator脚本引擎.md │ │ │ └── 080.Kotlin脚本引擎.md │ │ ├── 015.脚本与Java进行交互.md │ │ ├── 020.多脚本语言混合共存.md │ │ ├── 030.文件脚本的定义.md │ │ ├── 050.动态刷新脚本.md │ │ ├── 060.验证脚本.md │ │ └── 070.卸载脚本.md │ ├── 110.🗂规则配置源 │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.SQL数据库配置源.md │ │ ├── 040.ZK规则文件配置源.md │ │ ├── 050.Nacos配置源.md │ │ ├── 060.Etcd配置源.md │ │ ├── 065.Apollo配置源.md │ │ ├── 066.📑Redis配置源 │ │ │ ├── 010.配置说明.md │ │ │ ├── 020.轮询模式配置.md │ │ │ └── 030.订阅模式配置.md │ │ └── 070.自定义配置源.md │ ├── 120.🍼元数据管理 │ │ ├── 010. 元数据操作器.md │ │ ├── 020.平滑热刷新.md │ │ ├── 030.启动不检查规则.md │ │ └── 040.启动不检查脚本.md │ ├── 125.🌌异步中的线程池 │ │ ├── 010.说明.md │ │ ├── 020.FlowExecutor层面的线程池.md │ │ └── 030.组件异步层面的线程池.md │ ├── 130.🎲动态构造 │ │ ├── 010.说明.md │ │ ├── 020.构造Node.md │ │ ├── 030.构造EL.md │ │ └── 040.构造Chain.md │ ├── 140.🧮决策路由 │ │ ├── 010.概念以及介绍.md │ │ └── 020.决策路由用法.md │ ├── 150.😸生命周期 │ │ ├── 010.启动时生命周期.md │ │ └── 020.执行时生命周期.md │ ├── 160.🎨高级特性 │ │ ├── 031.本地规则文件监听.md │ │ ├── 035.组件降级.md │ │ ├── 040.组件别名.md │ │ ├── 060.组件事件回调.md │ │ ├── 061.组件回滚.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 145.快速解析模式.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 170.自定义组件执行器.md │ │ ├── 180.简单监控.md │ │ └── 190.XML的DTD.md │ ├── 170.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 180.性能表现.md ├── 07.v2.12.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 021.🧁环境支持 │ │ ├── 005.环境支持说明.md │ │ ├── 010.JDK支持度.md │ │ ├── 020.Springboot支持度.md │ │ └── 030.Spring的支持度.md │ ├── 030.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 050.🗂规则以及配置源 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置源.md │ │ ├── 040.SQL数据库配置源.md │ │ ├── 050.Nacos配置源.md │ │ ├── 060.Etcd配置源.md │ │ ├── 065.Apollo配置源.md │ │ ├── 066.📑Redis配置源 │ │ │ ├── 010.配置说明.md │ │ │ ├── 020.轮询模式配置.md │ │ │ └── 030.订阅模式配置.md │ │ └── 070.自定义配置源.md │ ├── 055.🔗常规组件 │ │ ├── 010.普通组件.md │ │ ├── 020.选择组件.md │ │ ├── 030.布尔组件.md │ │ ├── 040.次数循环组件.md │ │ └── 055.迭代循环组件.md │ ├── 060.🧩EL规则的写法 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 045.条件编排.md │ │ ├── 046.循环编排.md │ │ ├── 047.捕获异常表达式.md │ │ ├── 048.与或非表达式.md │ │ ├── 050.使用子流程.md │ │ ├── 060.使用子变量.md │ │ ├── 070.复杂编排例子.md │ │ ├── 080.关于分号.md │ │ ├── 090.关于注释.md │ │ ├── 100.组件名包装.md │ │ └── 110.验证规则.md │ ├── 070.🌮数据上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ ├── 030.用初始化好的上下文传入.md │ │ ├── 040.给上下文设置别名.md │ │ └── 050.上下文参数注入.md │ ├── 080.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 085.🍋脚本组件 │ │ ├── 005.脚本语言介绍.md │ │ ├── 010.🍫脚本语言种类 │ │ │ ├── 010.Groovy脚本引擎.md │ │ │ ├── 020.Javascript脚本引擎.md │ │ │ ├── 030.Java脚本引擎.md │ │ │ ├── 040.QLExpress脚本引擎.md │ │ │ ├── 050.Python脚本引擎.md │ │ │ ├── 060.Lua脚本引擎.md │ │ │ ├── 070.Aviator脚本引擎.md │ │ │ └── 080.Kotlin脚本引擎.md │ │ ├── 015.脚本与Java进行交互.md │ │ ├── 020.多脚本语言混合共存.md │ │ ├── 030.文件脚本的定义.md │ │ ├── 050.动态刷新脚本.md │ │ ├── 060.验证脚本.md │ │ └── 070.卸载脚本.md │ ├── 086.🍇声明式组件 │ │ ├── 010.什么叫声明式组件.md │ │ ├── 020.类级别式声明.md │ │ └── 030.方法级别式声明.md │ ├── 090.🎲用代码动态构造规则 │ │ ├── 010.说明.md │ │ ├── 020.构造Node.md │ │ ├── 030.构造EL.md │ │ └── 040.构造Chain.md │ ├── 095.🍼元数据管理 │ │ ├── 010.概念以及介绍.md │ │ ├── 020.平滑热刷新.md │ │ ├── 030.启动不检查规则.md │ │ └── 040.查看指定规则下的所有组件.md │ ├── 097.🧮决策路由 │ │ ├── 010.概念以及介绍.md │ │ └── 020.决策路由用法.md │ ├── 098.😸生命周期 │ │ ├── 010.启动时生命周期.md │ │ └── 020.执行时生命周期.md │ ├── 100.🎨高级特性 │ │ ├── 030.前置和后置组件.md │ │ ├── 031.本地规则文件监听.md │ │ ├── 035.组件降级.md │ │ ├── 036.组件参数.md │ │ ├── 040.组件别名.md │ │ ├── 050.组件标签.md │ │ ├── 060.组件事件回调.md │ │ ├── 061.组件回滚.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 090.组件重试.md │ │ ├── 091.EL中的重试.md │ │ ├── 095.异步循环模式.md │ │ ├── 097.超时控制.md │ │ ├── 105.链路继承.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 145.快速解析模式.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 160.异步线程池自定义.md │ │ ├── 170.自定义组件执行器.md │ │ ├── 180.简单监控.md │ │ └── 190.XML的DTD.md │ ├── 110.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 120.性能表现.md ├── 08.v2.11.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 021.🧁环境支持 │ │ ├── 010.JDK支持度.md │ │ ├── 020.Springboot支持度.md │ │ └── 030.Spring的支持度.md │ ├── 030.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 050.🗂规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置源.md │ │ ├── 040.SQL数据库配置源.md │ │ ├── 050.Nacos配置源.md │ │ ├── 060.Etcd配置源.md │ │ ├── 065.Apollo配置源.md │ │ ├── 066.📑Redis配置源 │ │ │ ├── 010.配置说明.md │ │ │ ├── 020.轮询模式配置.md │ │ │ └── 030.订阅模式配置.md │ │ └── 070.自定义配置源.md │ ├── 055.🔗常规组件 │ │ ├── 010.普通组件.md │ │ ├── 020.选择组件.md │ │ ├── 030.条件组件.md │ │ ├── 040.次数循环组件.md │ │ ├── 050.条件循环组件.md │ │ ├── 055.迭代循环组件.md │ │ └── 060.退出循环组件.md │ ├── 060.🧩EL规则的写法 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 045.条件编排.md │ │ ├── 046.循环编排.md │ │ ├── 047.捕获异常表达式.md │ │ ├── 048.与或非表达式.md │ │ ├── 050.使用子流程.md │ │ ├── 060.使用子变量.md │ │ ├── 070.复杂编排例子.md │ │ ├── 080.关于分号.md │ │ ├── 090.关于注释.md │ │ ├── 100.组件名包装.md │ │ └── 110.验证规则.md │ ├── 070.🌮数据上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ └── 030.用初始化好的上下文传入.md │ ├── 080.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 085.🍋脚本组件 │ │ ├── 005.脚本语言介绍.md │ │ ├── 010.🍫脚本语言种类 │ │ │ ├── 010.Groovy脚本引擎.md │ │ │ ├── 020.Javascript脚本引擎.md │ │ │ ├── 030.Java脚本引擎.md │ │ │ ├── 040.QLExpress脚本引擎.md │ │ │ ├── 050.Python脚本引擎.md │ │ │ ├── 060.Lua脚本引擎.md │ │ │ └── 070.Aviator脚本引擎.md │ │ ├── 015.脚本与Java进行交互.md │ │ ├── 020.多脚本语言混合共存.md │ │ ├── 030.文件脚本的定义.md │ │ └── 050.动态刷新脚本.md │ ├── 086.🍇声明式组件 │ │ ├── 010.什么叫声明式组件.md │ │ ├── 020.类级别式声明.md │ │ └── 030.方法级别式声明.md │ ├── 090.🎲用代码动态构造规则 │ │ ├── 010.说明.md │ │ ├── 020.构造Node.md │ │ ├── 030.构造EL.md │ │ └── 040.构造Chain.md │ ├── 100.🎨高级特性 │ │ ├── 030.前置和后置组件.md │ │ ├── 031.本地规则文件监听.md │ │ ├── 035.组件降级.md │ │ ├── 036.组件参数.md │ │ ├── 040.组件别名.md │ │ ├── 050.组件标签.md │ │ ├── 060.组件事件回调.md │ │ ├── 061.组件回滚.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 090.组件重试.md │ │ ├── 091.异步循环模式.md │ │ ├── 092.超时控制.md │ │ ├── 100.平滑热刷新.md │ │ ├── 105.链路继承.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 145.快速解析模式.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 160.异步线程池自定义.md │ │ ├── 170.自定义组件执行器.md │ │ ├── 180.简单监控.md │ │ └── 190.XML的DTD.md │ ├── 110.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 120.性能表现.md ├── 09.v2.10.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 021.🧁环境支持 │ │ ├── 010.JDK支持度.md │ │ ├── 020.Springboot支持度.md │ │ └── 030.Spring的支持度.md │ ├── 030.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 050.🗂规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置源.md │ │ ├── 040.SQL数据库配置源.md │ │ ├── 050.Nacos配置源.md │ │ ├── 060.Etcd配置源.md │ │ ├── 065.Apollo配置源.md │ │ └── 070.自定义配置源.md │ ├── 055.🔗常规组件 │ │ ├── 010.普通组件.md │ │ ├── 020.选择组件.md │ │ ├── 030.条件组件.md │ │ ├── 040.次数循环组件.md │ │ ├── 050.条件循环组件.md │ │ ├── 055.迭代循环组件.md │ │ └── 060.退出循环组件.md │ ├── 060.🧩EL规则的写法 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 045.条件编排.md │ │ ├── 046.循环编排.md │ │ ├── 047.捕获异常表达式.md │ │ ├── 048.与或非表达式.md │ │ ├── 050.使用子流程.md │ │ ├── 060.使用子变量.md │ │ ├── 070.复杂编排例子.md │ │ ├── 080.关于分号.md │ │ ├── 090.关于注释.md │ │ ├── 100.组件名包装.md │ │ └── 110.验证规则.md │ ├── 070.🌮数据上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ └── 030.用初始化好的上下文传入.md │ ├── 080.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 085.🍋脚本组件 │ │ ├── 010.选择脚本语言.md │ │ ├── 020.定义脚本组件.md │ │ ├── 025.多脚本语言混合共存.md │ │ ├── 030.文件脚本的定义.md │ │ ├── 040.脚本与Java进行交互.md │ │ └── 050.动态刷新脚本.md │ ├── 086.🍇声明式组件 │ │ ├── 010.什么叫声明式组件.md │ │ ├── 020.类级别式声明.md │ │ └── 030.方法级别式声明.md │ ├── 090.🎲用代码动态构造规则 │ │ ├── 010.说明.md │ │ └── 020.如何构造.md │ ├── 100.🎨高级特性 │ │ ├── 030.前置和后置组件.md │ │ ├── 031.本地规则文件监听.md │ │ ├── 035.替补组件.md │ │ ├── 036.组件参数.md │ │ ├── 040.组件别名.md │ │ ├── 050.组件标签.md │ │ ├── 060.组件事件回调.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 090.组件重试.md │ │ ├── 100.平滑热刷新.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 160.异步线程池自定义.md │ │ ├── 170.自定义组件执行器.md │ │ ├── 180.简单监控.md │ │ └── 190.XML的DTD.md │ ├── 110.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 120.性能表现.md ├── 10.v2.9.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 030.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 050.🗂规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置源.md │ │ ├── 040.SQL数据库配置源.md │ │ ├── 050.Nacos配置源.md │ │ ├── 060.Etcd配置源.md │ │ ├── 065.Apollo配置源.md │ │ └── 070.自定义配置源.md │ ├── 055.🔗常规组件 │ │ ├── 010.普通组件.md │ │ ├── 020.选择组件.md │ │ ├── 030.条件组件.md │ │ ├── 040.次数循环组件.md │ │ ├── 050.条件循环组件.md │ │ ├── 055.迭代循环组件.md │ │ └── 060.退出循环组件.md │ ├── 060.🧩EL规则的写法 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 045.条件编排.md │ │ ├── 046.循环编排.md │ │ ├── 050.使用子流程.md │ │ ├── 060.使用子变量.md │ │ ├── 070.复杂编排例子.md │ │ ├── 080.关于分号.md │ │ ├── 090.关于注释.md │ │ ├── 100.组件名包装.md │ │ └── 110.验证规则.md │ ├── 070.🌮数据上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ └── 030.用初始化好的上下文传入.md │ ├── 080.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 085.🍋脚本组件 │ │ ├── 010.选择脚本语言.md │ │ ├── 020.定义脚本组件.md │ │ ├── 030.文件脚本的定义.md │ │ ├── 040.与Java进行交互.md │ │ └── 050.动态刷新脚本.md │ ├── 086.🍇声明式组件 │ │ ├── 010.什么叫声明式组件.md │ │ ├── 020.类级别式声明.md │ │ └── 030.方法级别式声明.md │ ├── 090.🎲用代码动态构造规则 │ │ ├── 010.说明.md │ │ └── 020.如何构造.md │ ├── 100.🎨高级特性 │ │ ├── 030.前置和后置组件.md │ │ ├── 035.替补组件.md │ │ ├── 036.组件参数.md │ │ ├── 040.组件别名.md │ │ ├── 050.组件标签.md │ │ ├── 060.组件事件回调.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 090.组件重试.md │ │ ├── 100.平滑热刷新.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 160.异步线程池自定义.md │ │ ├── 170.自定义组件执行器.md │ │ ├── 180.简单监控.md │ │ └── 190.XML的DTD.md │ ├── 110.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 120.性能表现.md ├── 15.v2.8.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 030.🍟快速开始(Hello world) │ │ ├── 005.说明.md │ │ ├── 010.🌿Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.🌱Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.🌵其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.🍢配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 050.🗂规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置.md │ │ └── 040.自定义配置源.md │ ├── 055.🔗常规组件 │ │ ├── 010.普通组件.md │ │ ├── 020.选择组件.md │ │ └── 030.条件组件.md │ ├── 060.🧩EL规则的写法 │ │ ├── 010.说明.md │ │ ├── 020.串行编排.md │ │ ├── 030.并行编排.md │ │ ├── 040.选择编排.md │ │ ├── 045.条件编排.md │ │ ├── 050.使用子流程.md │ │ ├── 060.使用子变量.md │ │ ├── 070.复杂编排例子.md │ │ ├── 080.关于分号.md │ │ ├── 090.关于注释.md │ │ └── 100.组件名包装.md │ ├── 070.🌮数据上下文 │ │ ├── 010.说明.md │ │ ├── 020.数据上下文的定义和使用.md │ │ └── 030.用初始化好的上下文传入.md │ ├── 080.🛩执行器 │ │ ├── 010.说明.md │ │ ├── 020.执行方法.md │ │ ├── 030.流程入参.md │ │ └── 040.LiteflowResponse对象.md │ ├── 090.🎲用代码动态构造规则 │ │ ├── 010.说明.md │ │ └── 020.如何构造.md │ ├── 100.🎨高级特性 │ │ ├── 010.脚本组件.md │ │ ├── 020.声明式组件.md │ │ ├── 030.前置和后置组件.md │ │ ├── 035.替补组件.md │ │ ├── 040.组件别名.md │ │ ├── 050.组件标签.md │ │ ├── 060.组件事件回调.md │ │ ├── 070.隐式子流程.md │ │ ├── 080.私有投递.md │ │ ├── 090.组件重试.md │ │ ├── 100.平滑热刷新.md │ │ ├── 110.组件切面.md │ │ ├── 120.步骤信息.md │ │ ├── 125.异常.md │ │ ├── 130.打印信息详解.md │ │ ├── 140.自定义请求Id.md │ │ ├── 150.不同格式规则加载.md │ │ ├── 160.异步线程池自定义.md │ │ ├── 170.自定义组件执行器.md │ │ └── 180.简单监控.md │ ├── 110.⛱测试用例以及示例 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 120.性能表现.md ├── 2.12.0升级指南.md ├── 2.12.4升级指南.md ├── 2.13.0升级指南.md ├── 20.v2.7.X文档 │ ├── 010.LiteFlow简介.md │ ├── 020.项目特性.md │ ├── 030.快速开始(Hello world) │ │ ├── 010.Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 035.配置项 │ │ ├── 010.说明.md │ │ ├── 020.Springboot下的配置项.md │ │ ├── 030.Spring下的配置项.md │ │ └── 040.其他场景代码设置配置项.md │ ├── 040.规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置.md │ │ └── 040.自定义配置源.md │ ├── 050.用代码动态构造规则 │ │ ├── 010.说明.md │ │ └── 020.如何构造.md │ ├── 060.使用详细指南 │ │ ├── 010.开启和关闭.md │ │ ├── 015.规则文件路径.md │ │ ├── 020.同步异步编排.md │ │ ├── 030.执行器.md │ │ ├── 040.数据上下文.md │ │ ├── 045.Response对象.md │ │ ├── 050.普通组件.md │ │ ├── 060.条件组件.md │ │ ├── 070.脚本组件.md │ │ ├── 080.声明式组件.md │ │ ├── 090.前置后置组件.md │ │ ├── 095.组件别名.md │ │ ├── 100.组件标签.md │ │ ├── 105.组件事件回调.md │ │ ├── 110.子流程.md │ │ ├── 120.隐式子流程.md │ │ ├── 130.私有投递.md │ │ ├── 140.组件重试.md │ │ ├── 150.平滑热刷新.md │ │ ├── 160.组件切面.md │ │ ├── 170.步骤信息.md │ │ ├── 180.打印信息详解.md │ │ ├── 190.不同格式规则加载.md │ │ ├── 200.When异步线程池.md │ │ ├── 210.自定义组件执行器.md │ │ └── 220.简单监控.md │ ├── 070.示例工程 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 080.性能表现.md ├── 30.v2.6.X文档 │ ├── 010.LiteFlow介绍.md │ ├── 020.项目特性.md │ ├── 030.安装和集成 │ │ ├── 010.Springboot场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ ├── 020.Spring场景安装运行 │ │ │ ├── 010.依赖.md │ │ │ ├── 020.配置.md │ │ │ └── 030.执行.md │ │ └── 030.其他场景安装运行 │ │ │ ├── 010.说明.md │ │ │ ├── 020.依赖.md │ │ │ ├── 030.配置.md │ │ │ └── 040.执行.md │ ├── 040.规则文件 │ │ ├── 010.规则文件格式.md │ │ ├── 020.本地规则文件配置.md │ │ ├── 030.ZK规则文件配置.md │ │ └── 040.自定义配置源.md │ ├── 050.用代码动态构造规则 │ │ ├── 010.说明.md │ │ └── 020.如何构造.md │ ├── 060.使用详细指南 │ │ ├── 010.开启和关闭.md │ │ ├── 020.同步异步编排.md │ │ ├── 030.执行器.md │ │ ├── 040.数据槽.md │ │ ├── 050.普通组件.md │ │ ├── 060.条件组件.md │ │ ├── 070.脚本组件.md │ │ ├── 080.声明式组件.md │ │ ├── 090.前置后置组件.md │ │ ├── 100.组件标签.md │ │ ├── 110.子流程.md │ │ ├── 120.隐式子流程.md │ │ ├── 130.私有投递.md │ │ ├── 140.组件重试.md │ │ ├── 150.平滑热刷新.md │ │ ├── 160.组件切面.md │ │ ├── 170.异常处理机制.md │ │ ├── 180.步骤打印.md │ │ ├── 190.不同格式规则加载.md │ │ ├── 200.When异步线程池.md │ │ ├── 210.自定义组件执行器.md │ │ └── 220.简单监控.md │ ├── 070.示例工程 │ │ ├── 010.测试用例.md │ │ └── 020.DEMO案例.md │ └── 080.性能表现.md ├── @pages │ └── archivesPage.md ├── PPT.md ├── index.md ├── liteflow-helper.md ├── whats new │ ├── 077.whats new in v2.13.2.md │ ├── 078.whats new in v2.13.1.md │ ├── 079.whats new in v2.13.0.md │ ├── 080.whats new in v2.12.4.md │ ├── 081.whats new in v2.12.3.md │ ├── 082.whats new in v2.12.2.md │ ├── 083.whats new in v2.12.1.md │ ├── 084.whats new in v2.12.0.md │ ├── 085.whats new in v2.11.4.md │ ├── 086.whats new in v2.11.3.md │ ├── 087.whats new in v2.11.2.md │ ├── 088.whats new in v2.11.0.md │ ├── 089.whats new in v2.10.6.md │ ├── 090.whats new in v2.10.5.md │ ├── 091.whats new in v2.10.2.md │ ├── 092.whats new in v2.10.1.md │ ├── 093.whats new in v2.10.0.md │ ├── 094.whats new in v2.9.7.md │ ├── 095.whats new in v2.9.6.md │ ├── 096.whats new in v2.9.5.md │ ├── 097.whats new in v2.9.4.md │ ├── 098.whats new in v2.9.3.md │ ├── 099.whats new in v2.9.1.md │ └── 100.whats new in v2.9.0.md ├── 专题解释 │ ├── 01.如何理解上下文这个概念?.md │ └── 02.Slot是一个什么样的概念,在框架中起到什么样的作用?.md ├── 付费社区.md ├── 关于项目.md ├── 加入社区讨论.md ├── 升级到2.7.X说明.md ├── 升级到2.8.X说明.md ├── 升级到2.9.3说明.md ├── 升级到2.9.X说明.md ├── 参与开发.md ├── 支持 │ ├── 01.支持.md │ └── 02.赞助者列表.md ├── 更新记录.md ├── 用户.md ├── 问答.md └── 项目成员.md ├── package-lock.json ├── package.json ├── patches └── vuepress-theme-vdoing+1.12.8.patch ├── utils ├── config.yml ├── editFrontmatter.js └── modules │ ├── fn.js │ └── readFileList.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # npm 2 | node_modules 3 | yarn-error.log 4 | 5 | # vscode 6 | .vscode 7 | 8 | #yarn 9 | 10 | # vuepress 11 | docs/.vuepress/dist 12 | 13 | # 百度链接推送 14 | urls.txt 15 | 16 | # mac 17 | .DS_Store 18 | 19 | .idea 20 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | LiteFlow的新官网 -------------------------------------------------------------------------------- /docs/.vuepress/plugins/love-me/index.js: -------------------------------------------------------------------------------- 1 | const path= require('path'); 2 | const LoveMyPlugin = (options={}) => ({ 3 | define () { 4 | const COLOR = options.color || "rgb(" + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + ")" 5 | const EXCLUDECLASS = options.excludeClassName || '' 6 | return {COLOR, EXCLUDECLASS} 7 | }, 8 | enhanceAppFiles: [ 9 | path.resolve(__dirname, 'love-me.js') 10 | ] 11 | }); 12 | module.exports = LoveMyPlugin; 13 | -------------------------------------------------------------------------------- /docs/.vuepress/public/img/bg-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/bg-dark.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/bg-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/bg-light.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/bg-read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/bg-read.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/chat-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/chat-group.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/LF-Tshirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/LF-Tshirt.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/ai4u-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/ai4u-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/apifox-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/apifox-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/apifox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/apifox.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/chicheng-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/chicheng-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/chicheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/chicheng.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/erd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/erd.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/fb-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/fb-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/fb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/fb.gif -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/lfClub-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/lfClub-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/liruan-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/liruan-banner.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/liruan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/liruan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/maxkey-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/maxkey-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/maxkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/maxkey.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/mdy-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/mdy-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/mdy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/mdy.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/misboot-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/misboot-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/misboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/misboot.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/postcat-banner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/postcat-banner.gif -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/postcat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/postcat-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/snowy-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/snowy-banner.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/snowy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/snowy.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/suzhong-banner-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/suzhong-banner-1.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/suzhong-banner-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/suzhong-banner-2.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/suzhong.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/suzhong.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/yinmai-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/yinmai-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/yinmai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/yinmai.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/yuncheng-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/yuncheng-banner.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/donate/yuncheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/donate/yuncheng.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/akali-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/akali-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/cubic-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/cubic-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/dantecloud-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/dantecloud-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/dromara-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/dromara-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/dynamictp-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/dynamictp-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/ee-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/ee-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/fastrequest-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/fastrequest-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/forest-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/forest-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/gobrsasync-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/gobrsasync-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/goview-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/goview-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/hertzbeat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/hertzbeat-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/hmily-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/hmily-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/hutool-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/hutool-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/imagecombiner-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/imagecombiner-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/jpom-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/jpom-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/koalas-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/koalas-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/liteflow-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/liteflow-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/maxkey-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/maxkey-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/mendmix-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/mendmix-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/myth-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/myth-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/northstar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/northstar-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/raincat-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/raincat-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/satoken-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/satoken-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/sureness-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/sureness-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/tlog-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/tlog-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/dromara/xeasypdf-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/dromara/xeasypdf-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/example-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/example-web.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/favicon.ico -------------------------------------------------------------------------------- /docs/.vuepress/public/img/gstar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/gstar.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/gvp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/gvp.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/chicheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/chicheng.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/dotnet-china-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/dotnet-china-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/flowlong-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/flowlong-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/gitee-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/gitee-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/hippo4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/hippo4j.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/layui-vue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/layui-vue.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/misboot-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/misboot-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/oschina-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/oschina-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/pearAdmin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/pearAdmin-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/rulego.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/rulego.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/snowy-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/snowy-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/uniadmin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/uniadmin-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/link/yuncheng-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/link/yuncheng-logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/liteflow-helper/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/liteflow-helper/1.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/liteflow-helper/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/liteflow-helper/2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/logo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/logo2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/author.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m1.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m10.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m11.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m3.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m4.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m5.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m6.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m7.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m8.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/members/m9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/members/m9.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/monthpv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/monthpv.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/offical-wx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/offical-wx.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/img/ppt/ppt1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/ppt/ppt1.gif -------------------------------------------------------------------------------- /docs/.vuepress/public/img/ppt/ppt2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/ppt/ppt2.gif -------------------------------------------------------------------------------- /docs/.vuepress/public/img/ppt/ppt3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/ppt/ppt3.gif -------------------------------------------------------------------------------- /docs/.vuepress/public/img/pressure1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/pressure1.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/pressure2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/pressure2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/pressure3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/pressure3.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/support.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/58city.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/58city.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/863.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/863.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/aircase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/aircase.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/alibaba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/alibaba.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/ams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/ams.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/ant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/ant.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/aotian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/aotian.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/beast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/beast.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/bytedance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/bytedance.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/cetc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/cetc.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/chediandian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/chediandian.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/chuangwei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/chuangwei.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/deppon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/deppon.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/dida.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/dida.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/didi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/didi.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/diheng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/diheng.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/dongruan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/dongruan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/fabrique.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/fabrique.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/fenqi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/fenqi.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/flypig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/flypig.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/fs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/fs.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/gb.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/guokan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/guokan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/gygpt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/gygpt.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/haixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/haixin.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/haojing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/haojing.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/hello.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/hello.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/hhkj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/hhkj.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/hr.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/hst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/hst.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/huirong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/huirong.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/hundsun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/hundsun.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/idadt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/idadt.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/jiaxin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/jiaxin.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/jinyou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/jinyou.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/jjb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/jjb.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/jzh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/jzh.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/kuaishou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/kuaishou.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/kuayue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/kuayue.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/lann.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/lann.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/lanwei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/lanwei.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/longhaida.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/longhaida.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/meituan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/meituan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/mi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/mi.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/modernpay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/modernpay.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/nanbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/nanbo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/oppo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/oppo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/pinganjiankang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/pinganjiankang.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/qingtuanshe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/qingtuanshe.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/qmxc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/qmxc.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/ringleai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/ringleai.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/sdkj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/sdkj.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/sdtk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/sdtk.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/sf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/sf.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/shyk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/shyk.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/sty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/sty.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/suixingfu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/suixingfu.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/suzhong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/suzhong.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/sygf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/sygf.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/tcsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/tcsk.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/tefa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/tefa.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/tonghuashun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/tonghuashun.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/vip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/vip.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/vivo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/vivo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/wxgreenstone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/wxgreenstone.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/xiaohongshu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/xiaohongshu.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/xiaohuodui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/xiaohuodui.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/xiaonuo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/xiaonuo.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/xingyi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/xingyi.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/yiche.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/yiche.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/ykc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/ykc.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/yuanquan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/yuanquan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/yueyang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/yueyang.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/yunding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/yunding.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/yxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/yxt.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhenai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhenai.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhibang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhibang.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhiyou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhiyou.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhongjin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhongjin.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhongjing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhongjing.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhongshan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhongshan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zhuanzhuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zhuanzhuan.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/users/zxw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/users/zxw.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/whats_new/2_11_0_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/whats_new/2_11_0_1.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/whats_new/2_11_0_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/whats_new/2_11_0_2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/whats_new/2_11_1_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/whats_new/2_11_1_1.png -------------------------------------------------------------------------------- /docs/.vuepress/public/img/zhishixingqiu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/img/zhishixingqiu.png -------------------------------------------------------------------------------- /docs/.vuepress/public/liteflow.dtd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 19 | -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-dark.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-dark.mov -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-dark.mov.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-dark.mov.bak -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-light.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-light.mov -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-light.mov.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-light.mov.bak -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-read.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-read.mov -------------------------------------------------------------------------------- /docs/.vuepress/public/video/bg-read.mov.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bryan31/liteflow-homepage/41f2a4d21ebd06c73eb9c79f9e2d4400898b11a0/docs/.vuepress/public/video/bg-read.mov.bak -------------------------------------------------------------------------------- /docs/.vuepress/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const path = require('path') 3 | const app = express() 4 | 5 | app.use(express.static(path.join(__dirname, 'dist'))) 6 | 7 | app.listen(8080, () => { 8 | console.log('App listening at port 8080') 9 | }) -------------------------------------------------------------------------------- /docs/00.en/08.v2.11.X Document/010.Introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍤 Introduction 3 | date: 2023-10-17 00:36:48 4 | permalink: /pages/5816c6/ 5 | --- 6 | 7 | ## 这是英文的 introduction -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/030.🧁环境支持/005.环境支持说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🗣环境支持说明 3 | date: 2024-11-18 11:39:00 4 | permalink: /pages/c1a488/ 5 | --- 6 | 7 | 这章里JDK和Spring体系的支持度是指: 8 | 9 | **LiteFlow官方的Release版本在这些环境的范围内是通过了超过2000多个测试用例的,但是这些版本之外的环境,没有进行过详细测试,但是并不代表无法使用,只是使用中出现的问题,需要自行去排查。** 10 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/030.🧁环境支持/010.JDK支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ☕️JDK支持度 3 | date: 2023-07-21 18:07:20 4 | permalink: /pages/7cf080/ 5 | --- 6 | 7 | LiteFlow要求的最低的JDK版本为8,支持JDK8~JDK17所有的版本。 8 | 9 | 如果你使用JDK11以上,确保LiteFlow的版本为v2.10.6及其以上版本。 10 | 11 | 因为LiteFlow从v2.10.6开始,对JDK11和JDK17进行了详细的用例测试,通过了全部的2200多个测试用例。而在v2.10.6以下版本,在JDK11以上是未经过测试用例保障的。 12 | 13 | 特别需要注意的是,如果你使用JDK9及其以上的版本,请确保jvm参数加上以下参数 14 | 15 | ```shell 16 | --add-opens java.base/sun.reflect.annotation=ALL-UNNAMED 17 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/030.🧁环境支持/020.Springboot支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌿Springboot支持度 3 | date: 2023-07-21 18:20:37 4 | permalink: /pages/891e0f/ 5 | --- 6 | 7 | LiteFlow要求的Springboot的最低的版本是2.0。 8 | 9 | 支持的范围是Springboot 2.X ~ Springboot 3.X。 10 | 11 | 当然如果你使用了最新的Springboot 3.X,相应的JDK版本也要切换为JDK17。 12 | 13 | 如果你想使用Springboot快速开始学习,请参考[Springboot场景安装运行](/pages/df6982/)。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/030.🧁环境支持/030.Spring的支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌱Spring的支持度 3 | date: 2023-07-21 18:24:20 4 | permalink: /pages/2d12db/ 5 | --- 6 | 7 | 如果你不使用Springboot,只使用Spring。 8 | 9 | LiteFlow要求的Spring的最低版本为Spring 5.0。 10 | 11 | 支持的范围是Spring 5.X ~ Spring 6.X。 12 | 13 | 当然如果你使用了最新的Spring 6.X,相应的JDK版本也要切换为JDK17。 14 | 15 | 如果你想使用Spring快速开始学习,请参考[Spring场景安装运行](/pages/0a4573/)。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.13.2 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.13.2 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", DefaultContext.class); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/030.🍩Solon场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2025-02-22 14:08:41 4 | permalink: /pages/3df00c/ 5 | --- 6 | 7 | 对于使用solon框架用户。LiteFlow也提供了依赖: 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-solon-plugin 13 | 2.13.2 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/040.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/040.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.13.2 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/040.🍟快速开始(Hello world)/040.🌵其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-06 23:15:50 4 | permalink: /pages/151524/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("config/flow.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/b5065a/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", DefaultContext.class); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/74b4bf/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/050.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/050.🍢配置项/035.Solon下的配置项.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍩Solon下的配置项 3 | date: 2025-02-22 15:19:36 4 | permalink: /pages/43178b/ 5 | --- 6 | 7 | Solon下的配置项同[Springboot下的配置项](/pages/4594ec/)。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/060.🔗组件/010.🛍继承式组件/010.普通组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📎普通组件 3 | date: 2022-06-29 17:53:36 4 | permalink: /pages/8486fb/ 5 | --- 6 | 7 | 普通组件节点需要继承`NodeComponent`,可用于`THEN`和`WHEN`等关键字中。 8 | 9 | 需要实现`process`方法 10 | 11 | ```java 12 | @LiteflowComponent("a") 13 | public class ACmp extends NodeComponent { 14 | 15 | @Override 16 | public void process() { 17 | System.out.println("ACmp executed!"); 18 | } 19 | } 20 | ``` 21 | 22 | 普通组件的内部可以覆盖的方法和this关键字可调用的方法见[组件内方法覆盖和调用](/pages/83073e/)这一章。 23 | 24 | 上述例子中的`a`即为这个组件的id,对于组件id命名的约束,有以下几个规范: 25 | 26 | * 不能以数字开头 27 | * 中间不能有运算符号的出现 28 | 29 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`,这些组件id在编排时会编译不过。 30 | 31 | 但是也有方法能打破这个限制,请参考[组件名包装](/pages/2df3d9/)这一章。 32 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/060.🔗组件/010.🛍继承式组件/030.布尔组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ⛓布尔组件 3 | date: 2022-08-26 12:25:04 4 | permalink: /pages/cb0b59/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了布尔组件的定义。 10 | 11 | 布尔组件是以前IF组件,WHILE组件,BREAK组件的统一。他们三个组件有共同特征,都是返回布尔类型,所以将三个组件类型合三为一,成为了布尔组件。 12 | 13 | 布尔组件可用于以下关键字中: 14 | 15 | `IF...ELIF...ELSE`,可以参考[条件编排](/pages/e76999/)这一章。 16 | 17 | `WHILE...DO...`,可以参考[循环编排](/pages/fbf715/)这一章。 18 | 19 | `FOR...DO...BREAK`,`WHILE...DO...BREAK`,`ITERATOR...DO...BREAK`,可以参考[循环编排](/pages/fbf715/)这一章。 20 | 21 | 22 | 布尔组件的定义,需要继承`NodeBooleanComponent`: 23 | 24 | ```java 25 | @Component("x") 26 | public class XCmp extends NodeBooleanComponent { 27 | @Override 28 | public boolean processBoolean() throws Exception { 29 | //do your biz 30 | return true; 31 | } 32 | } 33 | ``` 34 | 35 | 布尔组件的内部可以覆盖的方法和this关键字可调用的方法见[组件内方法覆盖和调用](/pages/83073e/)这一章。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/060.🔗组件/010.🛍继承式组件/060.LiteflowComponent.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🏄LiteflowComponent 3 | date: 2025-02-14 16:41:23 4 | permalink: /pages/68320a/ 5 | --- 6 | 7 | `@LiteflowComponent`注解是继承于Spring的`@Component`标签的,所以从作用上来说,和`@Component`标签并没有什么区别,但是`@LiteflowComponent`新增加了`name`属性,用于给组件起别名,在打印调用链的时候会体现。具体请查看[打印信息详解](/pages/4d614c/)章节,新版本开始,推荐大家使用`@LiteflowComponent`,当然`@Component`也同样可以继续沿用。 8 | 9 | 所以LiteFlow的组件也是受Spring容器管理的,你可以用Spring注解`@AutoWired`或者`@Resource`去注入任何其他Bean。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/060.🔗组件/020.🎁声明式组件/010.什么叫声明式组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥭什么叫声明式组件 3 | date: 2022-10-05 23:19:02 4 | permalink: /pages/46f0fa/ 5 | --- 6 | 7 | 何谓声明式组件? 8 | 9 | 之前章节介绍的一些类型的组件,在写法上需要你自己去定义一个类去继承诸如`NodeComponent`之类的父类。这样一方面造成了耦合,另一方面由于java是单继承制,所以使用者就无法再去继承自己的类了,在自由度上就少了很多玩法。 10 | 11 | 声明式组件这一特性允许你自定义的组件不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。 12 | 13 | 甚至于你可以用一个类去定义多个组件,仅仅依靠注解就可以完成,这个特性也叫做方法级别式声明。 14 | 15 | :::tip 16 | 目前声明式组件只能在springboot环境中使用. 17 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/a590ee/ 5 | --- 6 | 7 | ## 基本用法 8 | 9 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 10 | 11 | 12 | ```xml 13 | 14 | THEN(a, b, c, d); 15 | 16 | ``` 17 | 18 | 当然你如果嵌套来写,也是和上面等价的 19 | ```xml 20 | 21 | THEN(a, b, THEN(c, d)); 22 | 23 | ``` 24 | 25 | :::tip 图示 26 | 27 | ::: 28 | 29 | ## 等价用法 30 | 31 | 由于`THEN`关键字用来表示串行在语义上有些不妥,但是为了兼容,又没法完全替换。所以后期版本同时支持了`SER`关键字,和`THEN`是完全等价的。 32 | 33 | ```xml 34 | 35 | SER(a, b, c, d); 36 | 37 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/110.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/140.🍉组件参数语法/000.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 说明 3 | date: 2025-02-21 23:13:30 4 | permalink: /pages/6e4d15/ 5 | --- 6 | 7 | 组件参数是指给组件编排中设置特定的参数。这些参数能在组件中能被轻易取出来参与逻辑运算。 8 | 9 | LiteFlow能给组件设置参数的关键有三个,分别为`tag`,`data`和`bind`,它们做的事都是设置参数,但是在各自的场景上又略微有不同。以下篇幅会分别介绍。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/180.验证规则.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔆验证规则 3 | date: 2022-12-01 00:10:24 4 | permalink: /pages/395fd0/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow为规则EL提供了一个验证的方法接口,用于验证EL是不是能被正确解析。 10 | 11 | 你可以调用如下方法来进行验证: 12 | 13 | ```java 14 | public void yourMethod() { 15 | boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)"); 16 | ... 17 | } 18 | ``` 19 | 20 | 带异常的调用方法 21 | 22 | ```java 23 | public void yourMethod() { 24 | ValidationResp resp = LiteFlowChainELBuilder.validateWithEx("THEN(a, b, h)"); 25 | if (!resp.isSuccess()){ 26 | log.error(resp.getCause()); 27 | } 28 | } 29 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/190.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/f3dc09/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 在LiteFlow的EL规则写法里,你也可以写注释。从2.13.0开始,只支持`/** **/`这种注释,不支持单行注释`//`。 10 | 11 | 例如: 12 | 13 | ```xml 14 | 15 | 16 | /** 我是注释 **/ 17 | THEN(a, b, WHEN(c, d)) 18 | 19 | ``` 20 | 21 | 22 | ```xml 23 | 24 | THEN( 25 | /** 26 | * 我是多行注释 27 | * 我是多行注释 28 | **/ 29 | WHEN(c, d) 30 | ) 31 | 32 | ``` 33 | 34 | **要注意,不能在表达式中间夹杂注释,以下是无法编译的:** 35 | 36 | ```xml 37 | 38 | THEN( 39 | a,b, 40 | /** 我是注释 **/ 41 | WHEN(c, d) 42 | ) 43 | 44 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/070.🧩EL规则/210.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/080.🌮上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/090.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/090.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/100.🍋脚本组件/050.动态刷新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍘动态刷新脚本 3 | date: 2022-10-05 22:47:47 4 | permalink: /pages/cbcb14/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 其实在[平滑热刷新](/pages/204d71/)这章所描述的刷新整个规则已经包含了脚本的热刷新。 10 | 11 | 这里做一个摘用,你可以调用如下的代码进行脚本的热刷新: 12 | 13 | ```java 14 | LiteflowMetaOperator.reloadScript(nodeId, script); 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/100.🍋脚本组件/060.验证脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍦验证脚本 3 | date: 2024-04-10 16:12:44 4 | permalink: /pages/a5f7d9/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了验证脚本的接口,你可以这么使用,去验证一个脚本是否规范: 10 | 11 | ```java 12 | boolean isValid = ScriptValidator.validate(script); 13 | ``` 14 | 15 | 返回布尔值,true为通过检查,反之亦然。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/100.🍋脚本组件/070.卸载脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🗑卸载脚本 3 | date: 2024-04-10 16:28:25 4 | permalink: /pages/28ad17/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了卸载脚本的接口,你可以这么使用: 10 | 11 | ```java 12 | FlowBus.unloadScriptNode(String nodeId); 13 | ``` 14 | 15 | 此方法不仅会卸载编译好的script,也会在元数据中删除相应的节点。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/120.🍼元数据管理/040.启动不检查脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥨启动不检查脚本 3 | date: 2025-02-20 18:23:21 4 | permalink: /pages/891f37/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 同[启动时不检查规则](/pages/891f36/)一样,也是同样的配置,但要注意这个特性只有2.13.0(含)之后才有。 10 | 11 | ```properties 12 | liteflow.parse-mode=PARSE_ONE_ON_FIRST_EXEC 13 | ``` 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/125.🌌异步中的线程池/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 💧说明 3 | date: 2025-02-20 19:17:28 4 | permalink: /pages/3a3b69/ 5 | --- 6 | 7 | 在LiteFlow中,所有和异步运行有关的,都和线程池有关。 8 | 9 | 框架提供了多个线程池有关的参数,关键字以及自定义策略。本章将阐述线程池在所有的异步场景中的用法。 10 | 11 | :::tip 12 | 从2.13.0开始,框架中的线程池模型设计和之前的版本有较大的差异性,所以此章只适用于2.13.0之后的版本。 13 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/130.🎲动态构造/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于: 16 | 17 | 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | 19 | ::: 20 | 21 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 22 | 23 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/204d71/)。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/140.🧮决策路由/010.概念以及介绍.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🏖概念以及介绍 3 | date: 2024-04-13 13:14:55 4 | permalink: /pages/ec1ac4/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 在之前的介绍中,LiteFlow执行一个规则主要是依赖`FlowExecutor`来执行,需要指定一个规则Id。 10 | 11 | 但是在有些场景中,使用者定义若干个规则,具体执行哪个规则事先并不知道。需要依靠入参去动态判断执行某一个或多个规则。 12 | 13 | 在之前的介绍中,除非你定义一个主规则。通过`SWITCH`去判断,来执行哪个子规则。其实也不是不可以。但是本质上还是执行一个规则。只不过通过这个主规则把子规则给串起来而已。并且想要同时执行多个规则,也是需要刻意去编排的。初学者并不知道如何去比编排这样的规则场景。 14 | 15 | 为此,LiteFlow推出了决策路由特性,也就是说,现在LiteFlow支持不指定规则,在所有规则中通过对决策表达式的判断来动态执行规则。符合决策表达式的规则则执行,不符合的不予以执行。 16 | 17 | 这个特性能很好的解决需要动态决策的场景。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/160.🎨高级特性/031.本地规则文件监听.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍌本地规则文件监听 3 | date: 2023-03-16 22:59:58 4 | permalink: /pages/f8aa79/ 5 | --- 6 | 7 | ## 单个文件的监听 8 | 9 | 首先,在LiteFlow的配置`liteflow.rule-source`中,不光可以配置项目内的规则文件,其实还可以配置本地磁盘上的文件的,比如: 10 | 11 | ```properties 12 | liteflow.rule-source=/Users/bryan31/liteflow/test/flow.xml 13 | ``` 14 | 15 | 但是当你本地规则文件改变了的情况下,你的项目是无法获知的,你只能通过手动刷新规则去实现热刷新(详细请阅读[平滑热刷新](/pages/204d71/))。 16 | 17 | 现在LiteFlow支持对本地文件的监听配置了。 18 | 19 | 你只需要配置`liteflow.enable-monitor-file=true`,即可开启自动对文件的监听特性。文件改动,你的项目无需做任何事,立马自动刷新整个规则。非常方便。 20 | 21 | ## 模糊文件路径的监听 22 | 23 | 如果你用模糊匹配的方式也是可以的,同样也会对匹配的所有文件进行监听。 24 | 25 | ```properties 26 | liteflow.rule-source=/Users/bryan31/liteflow/**/flow*.xml 27 | ``` 28 | 29 | 还是只需要配置`liteflow.enable-monitor-file=true`即可。 30 | -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/160.🎨高级特性/145.快速解析模式.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🫕快速解析模式 3 | date: 2024-01-14 21:16:54 4 | permalink: /pages/5fe959/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了一个liteflow.fast-load的配置参数: 10 | 11 | ```properties 12 | liteflow.fast-load=false 13 | ``` 14 | 15 | 如果把这个设为`true`,则在拥有超大量的规则的时候,加载性能能提高4倍。 16 | 17 | 这里超大量规则指的是5000条规则以上。如果几百个规则,还是推荐用默认模式。 18 | 19 | 我并不推荐所有的人把快速load模式打开,因为快速load模式牺牲了热更新时的平滑性。换句话说就是,在正常模式下,如果当你热更新时正好有正在执行的流程,那么正在执行的流程是会用老的链路的,只有下一次才会用最新的链路。如果你打开了快速load模式,那么在热更新时,正好在执行过程中的流程有可能前半部分是老的流程,而后半部分有可能读到新的流程。这样就造成了不一致了。 20 | 21 | 当然这种场景是非常极端的场景,在普通的场景中,可能根本也不需要保持热更新时的平滑性。所以fast-load模式是有代价的。鱼和熊掌不可兼得。看项目要求了。 -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/160.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.xml,multipleType/flow.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/160.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/160.🎨高级特性/190.XML的DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧉XML的DTD 3 | date: 2022-10-24 12:50:29 4 | permalink: /pages/0066ae/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow对XML增加了DTD,方便在XML里作一些检查和提醒约束。 10 | 11 | 具体引用方法为: 12 | 13 | ```xml {2} 14 | 15 | 16 | 17 | 18 | THEN(a,b,WHEN(c,d)); 19 | 20 | 21 | ``` 22 | 23 | :::tip 24 | 当然不加也是没有关系的,因为LiteFlow xml节点非常简单,并没有很多的节点标签需要记忆。 25 | ::: -------------------------------------------------------------------------------- /docs/06.v2.13.X文档/170.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | ## DEMO案例1 10 | 11 | > [DEMO案例1](https://github.com/bryan31/message-demo) 12 | 13 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 14 | 15 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 16 | 17 | ## DEMO案例2 18 | 19 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 20 | 21 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 22 | 23 | 这个示例工程提供了一个简单的界面,供大家测试之用 24 | 25 | ![example-web](/img/example-web.png) 26 | 27 | ## 外置规则存储案例 28 | 29 | > [外置规则存储案例](https://github.com/bryan31/liteflow-ext-rule-demo) 30 | 31 | 如果你想把规则放到DB里,或者zk/nacos/etcd里,此案例为一个简单的DEMO,你可以根据此案例的演示来进行接入。 32 | 33 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/021.🧁环境支持/005.环境支持说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🗣环境支持说明 3 | date: 2024-11-18 11:39:00 4 | permalink: /pages/v2.12.X/c1a488/ 5 | --- 6 | 7 | 这章里JDK和Spring体系的支持度是指: 8 | 9 | **LiteFlow官方的Release版本在这些环境的范围内是通过了超过2000多个测试用例的,但是这些版本之外的环境,没有进行过详细测试,但是并不代表无法使用,只是使用中出现的问题,需要自行去排查。** 10 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/021.🧁环境支持/010.JDK支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ☕️JDK支持度 3 | date: 2023-07-21 18:07:20 4 | permalink: /pages/v2.12.X/7cf080/ 5 | --- 6 | 7 | LiteFlow要求的最低的JDK版本为8,支持JDK8~JDK17所有的版本。 8 | 9 | 如果你使用JDK11以上,确保LiteFlow的版本为v2.10.6及其以上版本。 10 | 11 | 因为LiteFlow从v2.10.6开始,对JDK11和JDK17进行了详细的用例测试,通过了全部的1800多个测试用例。而在v2.10.6以下版本,在JDK11以上是未经过测试用例保障的。 12 | 13 | 特别需要注意的是,如果你使用JDK9及其以上的版本,请确保jvm参数加上以下参数 14 | 15 | ```shell 16 | --add-opens java.base/sun.reflect.annotation=ALL-UNNAMED 17 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/021.🧁环境支持/020.Springboot支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌿Springboot支持度 3 | date: 2023-07-21 18:20:37 4 | permalink: /pages/v2.12.X/891e0f/ 5 | --- 6 | 7 | LiteFlow要求的Springboot的最低的版本是2.0。 8 | 9 | 支持的范围是Springboot 2.X ~ Springboot 3.X。 10 | 11 | 当然如果你使用了最新的Springboot 3.X,相应的JDK版本也要切换为JDK17。 12 | 13 | 如果你想使用Springboot快速开始学习,请参考[Springboot场景安装运行](/pages/v2.12.X/df6982/)。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/021.🧁环境支持/030.Spring的支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌱Spring的支持度 3 | date: 2023-07-21 18:24:20 4 | permalink: /pages/v2.12.X/2d12db/ 5 | --- 6 | 7 | 如果你不使用Springboot,只使用Spring。 8 | 9 | LiteFlow要求的Spring的最低版本为Spring 5.0。 10 | 11 | 支持的范围是Spring 5.X ~ Spring 6.X。 12 | 13 | 当然如果你使用了最新的Spring 6.X,相应的JDK版本也要切换为JDK17。 14 | 15 | 如果你想使用Spring快速开始学习,请参考[Spring场景安装运行](/pages/v2.12.X/0a4573/)。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/v2.12.X/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.12.X/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.12.4.1 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.12.X/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.12.4.1 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/v2.12.X/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.12.X/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/v2.12.X/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.12.X/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.12.4.1 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-06 23:15:50 4 | permalink: /pages/v2.12.X/151524/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("config/flow.el.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/v2.12.X/b5065a/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.12.X/74b4bf/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/040.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/v2.12.X/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/v2.12.X/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/v2.12.X/a590ee/ 5 | --- 6 | 7 | ## 基本用法 8 | 9 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 10 | 11 | 12 | ```xml 13 | 14 | THEN(a, b, c, d); 15 | 16 | ``` 17 | 18 | 当然你如果嵌套来写,也是和上面等价的 19 | ```xml 20 | 21 | THEN(a, b, THEN(c, d)); 22 | 23 | ``` 24 | 25 | :::tip 图示 26 | 27 | ::: 28 | 29 | ## 等价用法 30 | 31 | 由于`THEN`关键字用来表示串行在语义上有些不妥,但是为了兼容,又没法完全替换。所以后期版本同时支持了`SER`关键字,和`THEN`是完全等价的。 32 | 33 | ```xml 34 | 35 | SER(a, b, c, d); 36 | 37 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/060.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/v2.12.X/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/v2.12.X/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/090.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/v2.12.X/f3dc09/ 5 | --- 6 | 7 | 在LiteFlow的EL规则写法里,你也可以写注释。注释的写法有2种 8 | 9 | 单行注释 10 | 11 | ```xml 12 | 13 | 14 | //我是注释 15 | THEN(a, b, WHEN(c, d)) 16 | 17 | ``` 18 | 19 | 多行注释 20 | 21 | ```xml 22 | 23 | THEN( 24 | //我是注释 25 | a, 26 | b, 27 | /** 28 | * 我是多行注释 29 | * 我是多行注释 30 | **/ 31 | WHEN(c, d) 32 | ) 33 | 34 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/100.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/v2.12.X/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/060.🧩EL规则的写法/110.验证规则.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔆验证规则 3 | date: 2022-12-01 00:10:24 4 | permalink: /pages/v2.12.X/395fd0/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow为规则EL提供了一个验证的方法接口,用于验证EL是不是能被正确解析。 10 | 11 | 你可以调用如下方法来进行验证: 12 | 13 | ```java 14 | public void yourMethod() { 15 | boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)"); 16 | ... 17 | } 18 | ``` 19 | 20 | 带异常的调用方法 21 | 22 | ```java 23 | public void yourMethod() { 24 | ValidationResp resp = LiteFlowChainELBuilder.validateWithEx("THEN(a, b, h)"); 25 | if (!resp.isSuccess()){ 26 | log.error(resp.getCause()); 27 | } 28 | } 29 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/070.🌮数据上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/v2.12.X/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/v2.12.X/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/080.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/v2.12.X/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/080.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/v2.12.X/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/v2.12.X/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/085.🍋脚本组件/050.动态刷新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍘动态刷新脚本 3 | date: 2022-10-05 22:47:47 4 | permalink: /pages/v2.12.X/cbcb14/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 其实在[平滑热刷新](/pages/v2.12.X/204d71/)这章所描述的刷新整个规则已经包含了脚本的热刷新。 10 | 11 | 这里做一个摘用,你可以调用如下的代码进行脚本的热刷新: 12 | 13 | ```java 14 | FlowBus.reloadScript(nodeId, script); 15 | ``` 16 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/085.🍋脚本组件/060.验证脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍦验证脚本 3 | date: 2024-04-10 16:12:44 4 | permalink: /pages/v2.12.X/a5f7d9/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了验证脚本的接口,你可以这么使用,去验证一个脚本是否规范: 10 | 11 | ```java 12 | boolean isValid = ScriptValidator.validate(script); 13 | ``` 14 | 15 | 返回布尔值,true为通过检查,反之亦然。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/085.🍋脚本组件/070.卸载脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🗑卸载脚本 3 | date: 2024-04-10 16:28:25 4 | permalink: /pages/v2.12.X/28ad17/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了卸载脚本的接口,你可以这么使用: 10 | 11 | ```java 12 | FlowBus.unloadScriptNode(String nodeId); 13 | ``` 14 | 15 | 此方法不仅会卸载编译好的script,也会在元数据中删除相应的节点。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/086.🍇声明式组件/010.什么叫声明式组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥭什么叫声明式组件 3 | date: 2022-10-05 23:19:02 4 | permalink: /pages/v2.12.X/46f0fa/ 5 | --- 6 | 7 | 何谓声明式组件? 8 | 9 | 之前章节介绍的一些类型的组件,在写法上需要你自己去定义一个类去继承诸如`NodeComponent`之类的父类。这样一方面造成了耦合,另一方面由于java是单继承制,所以使用者就无法再去继承自己的类了,在自由度上就少了很多玩法。 10 | 11 | 声明式组件这一特性允许你自定义的组件不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。 12 | 13 | 甚至于你可以用一个类去定义多个组件,仅仅依靠注解就可以完成,这个特性也叫做方法级别式声明。 14 | 15 | :::tip 16 | 目前声明式组件只能在springboot环境中使用. 17 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/090.🎲用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/v2.12.X/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于: 16 | 17 | 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | 19 | ::: 20 | 21 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 22 | 23 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.12.X/204d71/)。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/095.🍼元数据管理/010.概念以及介绍.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ⛰概念以及介绍 3 | date: 2024-04-10 21:29:22 4 | permalink: /pages/v2.12.X/7cb165/ 5 | --- 6 | 7 | 在LiteFlow框架中,最重要的两个概念就是`规则`以及`组件`。 8 | 9 | 框架提供了一个元数据管理器`FlowBus`用来管理这两大元素。 10 | 11 | 对于所有解析后的规则都保存在`FlowBus`中的`chainMap`中,并且`FlowBus`也提供了若干静态方法来对规则进行管理。 12 | 13 | 对于规则的管理,常用的方法都提供,比如说判断一个chain是否存在,获得一个chain,删除一个chain等。具体方法这里不再细说,看方法名就可以轻松判断出来。 14 | 15 | 对于组件来说,所有注册的节点都应该在`nodeMap`中,如果开发者发现自己的组件并不在`nodeMap`中,说明并未注册成功。在没注册的情况下执行链路,就会报组件不存在这样的错误。 16 | 17 | `FlowBus`同样对组件也提供了一些基本的方法供操作。 18 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/095.🍼元数据管理/040.查看指定规则下的所有组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🫔查看指定规则下的所有组件 3 | date: 2024-04-10 22:03:03 4 | permalink: /pages/v2.12.X/b0bb54/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow中的`FlowBus`也支持查看某一个规则下的所有组件: 10 | 11 | ```java 12 | List nodeList = FlowBus.getNodesByChainId("chain1"); 13 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/097.🧮决策路由/010.概念以及介绍.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🏖概念以及介绍 3 | date: 2024-04-13 13:14:55 4 | permalink: /pages/v2.12.X/ec1ac4/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | 在之前的介绍中,LiteFlow执行一个规则主要是依赖`FlowExecutor`来执行,需要指定一个规则Id。 10 | 11 | 但是在有些场景中,使用者定义若干个规则,具体执行哪个规则事先并不知道。需要依靠入参去动态判断执行某一个或多个规则。 12 | 13 | 在之前的介绍中,除非你定义一个主规则。通过`SWITCH`去判断,来执行哪个子规则。其实也不是不可以。但是本质上还是执行一个规则。只不过通过这个主规则把子规则给串起来而已。并且想要同时执行多个规则,也是需要刻意去编排的。初学者并不知道如何去比编排这样的规则场景。 14 | 15 | 为此,LiteFlow推出了决策路由特性,也就是说,现在LiteFlow支持不指定规则,在所有规则中通过对决策表达式的判断来动态执行规则。符合决策表达式的规则则执行,不符合的不予以执行。 16 | 17 | 这个特性能很好的解决需要动态决策的场景。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/100.🎨高级特性/031.本地规则文件监听.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍌本地规则文件监听 3 | date: 2023-03-16 22:59:58 4 | permalink: /pages/v2.12.X/f8aa79/ 5 | --- 6 | 7 | ## 单个文件的监听 8 | 9 | 首先,在LiteFlow的配置`liteflow.rule-source`中,不光可以配置项目内的规则文件,其实还可以配置本地磁盘上的文件的,比如: 10 | 11 | ```properties 12 | liteflow.rule-source=/Users/bryan31/liteflow/test/flow.xml 13 | ``` 14 | 15 | 但是当你本地规则文件改变了的情况下,你的项目是无法获知的,你只能通过手动刷新规则去实现热刷新(详细请阅读[平滑热刷新](/pages/v2.12.X/204d71/))。 16 | 17 | 现在LiteFlow支持对本地文件的监听配置了。 18 | 19 | 你只需要配置`liteflow.enable-monitor-file=true`,即可开启自动对文件的监听特性。文件改动,你的项目无需做任何事,立马自动刷新整个规则。非常方便。 20 | 21 | ## 模糊文件路径的监听 22 | 23 | 如果你用模糊匹配的方式也是可以的,同样也会对匹配的所有文件进行监听。 24 | 25 | ```properties 26 | liteflow.rule-source=/Users/bryan31/liteflow/**/flow*.xml 27 | ``` 28 | 29 | 还是只需要配置`liteflow.enable-monitor-file=true`即可。 30 | -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/100.🎨高级特性/145.快速解析模式.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🫕快速解析模式 3 | date: 2024-01-14 21:16:54 4 | permalink: /pages/v2.12.X/5fe959/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow提供了一个liteflow.fast-load的配置参数: 10 | 11 | ```properties 12 | liteflow.fast-load=false 13 | ``` 14 | 15 | 如果把这个设为`true`,则在拥有超大量的规则的时候,加载性能能提高4倍。 16 | 17 | 这里超大量规则指的是5000条规则以上。如果几百个规则,还是推荐用默认模式。 18 | 19 | 我并不推荐所有的人把快速load模式打开,因为快速load模式牺牲了热更新时的平滑性。换句话说就是,在正常模式下,如果当你热更新时正好有正在执行的流程,那么正在执行的流程是会用老的链路的,只有下一次才会用最新的链路。如果你打开了快速load模式,那么在热更新时,正好在执行过程中的流程有可能前半部分是老的流程,而后半部分有可能读到新的流程。这样就造成了不一致了。 20 | 21 | 当然这种场景是非常极端的场景,在普通的场景中,可能根本也不需要保持热更新时的平滑性。所以fast-load模式是有代价的。鱼和熊掌不可兼得。看项目要求了。 -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/100.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/v2.12.X/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.el.xml,multipleType/flow.el.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/100.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/v2.12.X/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/100.🎨高级特性/190.XML的DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧉XML的DTD 3 | date: 2022-10-24 12:50:29 4 | permalink: /pages/v2.12.X/0066ae/ 5 | --- 6 | 7 | **版本支持:** 8 | 9 | LiteFlow对XML增加了DTD,方便在XML里作一些检查和提醒约束。 10 | 11 | 具体引用方法为: 12 | 13 | ```xml {2} 14 | 15 | 16 | 17 | 18 | THEN(a,b,WHEN(c,d)); 19 | 20 | 21 | ``` 22 | 23 | :::tip 24 | 当然不加也是没有关系的,因为LiteFlow xml节点非常简单,并没有很多的节点标签需要记忆。 25 | ::: -------------------------------------------------------------------------------- /docs/07.v2.12.X文档/110.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/v2.12.X/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | ## DEMO案例1 10 | 11 | > [DEMO案例1](https://github.com/bryan31/message-demo) 12 | 13 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 14 | 15 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 16 | 17 | ## DEMO案例2 18 | 19 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 20 | 21 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 22 | 23 | 这个示例工程提供了一个简单的界面,供大家测试之用 24 | 25 | ![example-web](/img/example-web.png) 26 | 27 | ## 外置规则存储案例 28 | 29 | > [外置规则存储案例](https://github.com/bryan31/liteflow-ext-rule-demo) 30 | 31 | 如果你想把规则放到DB里,或者zk/nacos/etcd里,此案例为一个简单的DEMO,你可以根据此案例的演示来进行接入。 32 | 33 | -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/021.🧁环境支持/010.JDK支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ☕️JDK支持度 3 | date: 2023-07-21 18:07:20 4 | permalink: /pages/v2.11.X/7cf080/ 5 | --- 6 | 7 | LiteFlow要求的最低的JDK版本为8,支持JDK8~JDK17所有的版本。 8 | 9 | 如果你使用JDK11以上,确保LiteFlow的版本为v2.10.6及其以上版本。 10 | 11 | 因为LiteFlow从v2.10.6开始,对JDK11和JDK17进行了详细的用例测试,通过了全部的900多个测试用例。而在v2.10.6以下版本,在JDK11以上是未经过测试用例保障的。 12 | 13 | 特别需要注意的是,如果你使用JDK11及其以上的版本,请确保jvm参数加上以下参数 14 | 15 | ```shell 16 | --add-opens java.base/sun.reflect.annotation=ALL-UNNAMED 17 | ``` -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/021.🧁环境支持/020.Springboot支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌿Springboot支持度 3 | date: 2023-07-21 18:20:37 4 | permalink: /pages/v2.11.X/891e0f/ 5 | --- 6 | 7 | LiteFlow要求的Springboot的最低的版本是2.0。 8 | 9 | 支持的范围是Springboot 2.X ~ Springboot 3.X。 10 | 11 | 当然如果你使用了最新的Springboot 3.X,相应的JDK版本也要切换为JDK17。 12 | 13 | 如果你想使用Springboot快速开始学习,请参考[Springboot场景安装运行](/pages/v2.11.X/df6982/)。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/021.🧁环境支持/030.Spring的支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌱Spring的支持度 3 | date: 2023-07-21 18:24:20 4 | permalink: /pages/v2.11.X/2d12db/ 5 | --- 6 | 7 | 如果你不使用Springboot,只使用Spring。 8 | 9 | LiteFlow要求的Spring的最低版本为Spring 5.0。 10 | 11 | 支持的范围是Spring 5.X ~ Spring 6.X。 12 | 13 | 当然如果你使用了最新的Spring 6.X,相应的JDK版本也要切换为JDK17。 14 | 15 | 如果你想使用Spring快速开始学习,请参考[Spring场景安装运行](/pages/v2.11.X/0a4573/)。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/v2.11.X/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.11.X/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.11.4.2 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.11.X/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.11.4.2 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/v2.11.X/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.11.X/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/v2.11.X/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.11.X/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.11.4.2 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-06 23:15:50 4 | permalink: /pages/v2.11.X/151524/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("config/flow.el.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/v2.11.X/b5065a/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.11.X/74b4bf/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/040.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/v2.11.X/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/055.🔗常规组件/030.条件组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📌条件组件 3 | date: 2022-08-26 12:25:04 4 | permalink: /pages/v2.11.X/cb0b59/ 5 | --- 6 | 7 | LiteFlow从2.8.5版本开始,提供了条件组件的定义。 8 | 9 | 条件组件,也可以称之为IF组件,返回是一个true/false。可用于`IF...ELIF...ELSE`等关键字。 10 | 11 | 关于`IF...ELIF...ELSE`表达式的用法,可以参考[条件编排](/pages/v2.11.X/e76999/)这一章。 12 | 13 | 比如一个IF三元表达式,如下所示,x就是IF组件,为真,执行a,为假,执行b: 14 | 15 | ```xml 16 | 17 | IF(x, a, b); 18 | 19 | ``` 20 | 21 | x节点的定义,需要继承`NodeIfComponent`: 22 | 23 | ```java 24 | @Component("x") 25 | public class XCmp extends NodeIfComponent { 26 | @Override 27 | public boolean processIf() throws Exception { 28 | //do your biz 29 | return true; 30 | } 31 | } 32 | ``` 33 | 34 | 条件节点的内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.11.X/8486fb/)这一章。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/v2.11.X/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/v2.11.X/a590ee/ 5 | --- 6 | 7 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 8 | 9 | :::tip 10 | 从v2.11.4开始,你也可以用`SER`关键字,和`THEN`是等价的。 11 | ::: 12 | 13 | ```xml 14 | 15 | THEN(a, b, c, d); 16 | 17 | ``` 18 | 19 | 当然你如果嵌套来写,也是和上面等价的 20 | ```xml 21 | 22 | THEN(a, b, THEN(c, d)); 23 | 24 | ``` 25 | 26 | :::tip 图示 27 | 28 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/060.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/v2.11.X/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/v2.11.X/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/090.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/v2.11.X/f3dc09/ 5 | --- 6 | 7 | 在LiteFlow的EL规则写法里,你也可以写注释。注释的写法有2种 8 | 9 | 单行注释 10 | 11 | ```xml 12 | 13 | 14 | //我是注释 15 | THEN(a, b, WHEN(c, d)) 16 | 17 | ``` 18 | 19 | 多行注释 20 | 21 | ```xml 22 | 23 | THEN( 24 | //我是注释 25 | a, 26 | b, 27 | /** 28 | * 我是多行注释 29 | * 我是多行注释 30 | **/ 31 | WHEN(c, d) 32 | ) 33 | 34 | ``` -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/100.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/v2.11.X/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/060.🧩EL规则的写法/110.验证规则.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔆验证规则 3 | date: 2022-12-01 00:10:24 4 | permalink: /pages/v2.11.X/395fd0/ 5 | --- 6 | 7 | LiteFlow从v2.9.4版本开始,为规则EL提供了一个验证的方法接口,用于验证EL是不是能被正确解析。 8 | 9 | 你可以调用如下方法来进行验证: 10 | 11 | ```java 12 | public void yourMethod() { 13 | boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)"); 14 | ... 15 | } 16 | ``` -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/070.🌮数据上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/v2.11.X/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/v2.11.X/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/080.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/v2.11.X/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/080.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/v2.11.X/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/v2.11.X/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/085.🍋脚本组件/005.脚本语言介绍.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭脚本语言介绍 3 | date: 2023-08-27 22:54:15 4 | permalink: /pages/v2.11.X/38c781/ 5 | --- 6 | 7 | 在前面几个章节中,我们介绍了LiteFlow是用EL表达式来驱动`组件`执行顺序的。 8 | 9 | 可见`组件`是LiteFlow的最小逻辑执行单元。 10 | 11 | 而`组件`在前面几章的介绍中,都是需要你自己去定义类的。而定义类通常用于相对固定的逻辑,EL表达式能够即时调整,但是定义成类的组件中的逻辑还是要重启系统才能调整。 12 | 13 | 但是在实际业务场景中,有的场景需要实时的去调整小部分逻辑,那怎么办呢。 14 | 15 | 这就需要LiteFlow提供的`脚本组件`特性了。 16 | 17 | 脚本组件,顾名思义就是不再需要你去用类去定义组件了,而是用脚本来定义组件。而脚本也是可以被即时调整的。 18 | 19 | 脚本组件也是LiteFlow框架中非常重要且极具有特色的一个特性,利用EL+脚本组件,你可以做出一套极其灵活的系统。无论是执行顺序,还是关键逻辑,均可进行热刷新。 20 | 21 | LiteFlow在启动时就对脚本进行了预编译,虽然脚本的执行性能肯定比不过原生java,但是性能不会差太多,因为脚本方便且灵活可以热刷,这是java类所做不到的。 22 | 23 | LiteFlow中目前支持的脚本语言多达7种。下面一小章会大致说下每一种脚本语言该如何运用。 24 | 25 | :::tip 26 | 虽然脚本组件拥有可热刷新的特性,但是依旧不推荐把一个系统里所有的逻辑都写成脚本组件,因为并不是所有的逻辑都需要热修改。 27 | 28 | 推荐把需要灵活经常变的逻辑写成脚本组件,固定不变的逻辑还是用java类来写。`java类+脚本组件+EL`的组合是官方最为推荐的方式。 29 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/085.🍋脚本组件/050.动态刷新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍘动态刷新脚本 3 | date: 2022-10-05 22:47:47 4 | permalink: /pages/v2.11.X/cbcb14/ 5 | --- 6 | 7 | 其实在[平滑热刷新](/pages/v2.11.X/204d71/)这章所描述的刷新整个规则已经包含了脚本的热刷新。 8 | 9 | 但是如果你要仅仅热刷新脚本的话,这里也提供了单独的方式,你可以调用如下的代码进行脚本的热刷新: 10 | 11 | ```java 12 | ScriptExecutorFactory.loadInstance().getScriptExecutor("groovy").load(nodeId, script); 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/086.🍇声明式组件/010.什么叫声明式组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥭什么叫声明式组件 3 | date: 2022-10-05 23:19:02 4 | permalink: /pages/v2.11.X/46f0fa/ 5 | --- 6 | 7 | 何谓声明式组件? 8 | 9 | 之前章节介绍的普通组件和条件组件,在写法上需要你自己去定义一个类去继承`NodeComponent`或者`NodeSwitchComponent`。这样一方面造成了耦合,另一方面由于java是单继承制,所以使用者就无法再去继承自己的类了,在自由度上就少了很多玩法。 10 | 11 | 声明式组件这一特性允许你自定义的组件不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。 12 | 13 | 甚至于你可以用一个类去定义多个组件,仅仅依靠注解就可以完成,这个特性也叫做方法级别式声明。 14 | 15 | :::tip 16 | 目前声明式组件只能在springboot环境中使用. 17 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/090.🎲用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/v2.11.X/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于: 16 | 17 | 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | 19 | ::: 20 | 21 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 22 | 23 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.11.X/204d71/)。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/100.🎨高级特性/031.本地规则文件监听.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍌本地规则文件监听 3 | date: 2023-03-16 22:59:58 4 | permalink: /pages/v2.11.X/f8aa79/ 5 | --- 6 | 7 | 首先,在LiteFlow的配置`liteflow.rule-source`中,不光可以配置项目内的规则文件,其实还可以配置本地磁盘上的文件的,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=/Users/bryan31/liteflow/test/flow.xml 11 | ``` 12 | 13 | 但是当你本地规则文件改变了的情况下,你的项目是无法获知的,你只能通过手动刷新规则去实现热刷新(详细请阅读[平滑热刷新](/pages/v2.11.X/204d71/))。 14 | 15 | LiteFlow从2.10.0开始,增加了对本地规则文件监听的特性。 16 | 17 | LiteFlow从2.11.1开始,增加了对本地规则文件的模糊匹配以及监听。 18 | 19 | 如果你用模糊匹配的方式也是可以的,同样也会对匹配的所有文件进行监听。 20 | 21 | ```properties 22 | liteflow.rule-source=/Users/bryan31/liteflow/**/flow*.xml 23 | ``` 24 | 25 | 26 | 你只需要配置`liteflow.enable-monitor-file=true`,即可开启自动对文件的监听特性。文件改动,你的项目无需做任何事,立马自动刷新整个规则。非常方便。 27 | 28 | 在各个环境中如何配置,前面的章节也提到过,详情请阅读[配置项](/pages/v2.11.X/b70ec8/)这一大章节。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/100.🎨高级特性/145.快速解析模式.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🫕快速解析模式 3 | date: 2024-01-14 21:16:54 4 | permalink: /pages/v2.11.X/5fe959/ 5 | --- 6 | 7 | 从v2.11.4正式版中开始新增了一个liteflow.fast-load的配置参数: 8 | 9 | ```properties 10 | liteflow.fast-load=false 11 | ``` 12 | 13 | 如果把这个设为`true`,则在拥有超大量的规则的时候,加载性能能提高4倍。 14 | 15 | 这里超大量规则指的是5000条规则以上。如果几百个规则,还是推荐用默认模式。 16 | 17 | 我并不推荐所有的人把快速load模式打开,因为快速load模式牺牲了热更新时的平滑性。换句话说就是,在正常模式下,如果当你热更新时正好有正在执行的流程,那么正在执行的流程是会用老的链路的,只有下一次才会用最新的链路。如果你打开了快速load模式,那么在热更新时,正好在执行过程中的流程有可能前半部分是老的流程,而后半部分有可能读到新的流程。这样就造成了不一致了。 18 | 19 | 当然这种场景是非常极端的场景,在普通的场景中,可能根本也不需要保持热更新时的平滑性。所以fast-load模式是有代价的。鱼和熊掌不可兼得。看项目要求了。 -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/100.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/v2.11.X/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.el.xml,multipleType/flow.el.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/100.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/v2.11.X/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/100.🎨高级特性/190.XML的DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧉XML的DTD 3 | date: 2022-10-24 12:50:29 4 | permalink: /pages/v2.11.X/0066ae/ 5 | --- 6 | 7 | LiteFlow从2.9.1版本起,对XML增加了DTD,方便在XML里作一些检查和提醒约束。 8 | 9 | 具体引用方法为: 10 | 11 | ```xml {2} 12 | 13 | 14 | 15 | 16 | THEN(a,b,WHEN(c,d)); 17 | 18 | 19 | ``` 20 | 21 | :::tip 22 | 当然不加也是没有关系的,因为LiteFlow xml节点非常简单,并没有很多的节点标签需要记忆。 23 | ::: -------------------------------------------------------------------------------- /docs/08.v2.11.X文档/110.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/v2.11.X/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | ## DEMO案例1 10 | 11 | > [DEMO案例1](https://github.com/bryan31/message-demo) 12 | 13 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 14 | 15 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 16 | 17 | ## DEMO案例2 18 | 19 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 20 | 21 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 22 | 23 | 这个示例工程提供了一个简单的界面,供大家测试之用 24 | 25 | ![example-web](/img/example-web.png) 26 | 27 | ## 外置规则存储案例 28 | 29 | > [外置规则存储案例](https://github.com/bryan31/liteflow-ext-rule-demo) 30 | 31 | 如果你想把规则放到DB里,或者zk/nacos/etcd里,此案例为一个简单的DEMO,你可以根据此案例的演示来进行接入。 32 | 33 | -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/021.🧁环境支持/010.JDK支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ☕️JDK支持度 3 | date: 2023-07-21 18:07:20 4 | permalink: /pages/v2.10.X/7cf080/ 5 | --- 6 | 7 | LiteFlow要求的最低的JDK版本为8,支持JDK8~JDK17所有的版本。 8 | 9 | 如果你使用JDK11以上,确保LiteFlow的版本为v2.10.6及其以上版本。 10 | 11 | 因为LiteFlow从v2.10.6开始,对JDK11和JDK17进行了详细的用例测试,通过了全部的900多个测试用例。而在v2.10.6以下版本,在JDK11以上是未经过测试用例保障的。 12 | 13 | 特别需要注意的是,如果你使用JDK11及其以上的版本,请确保jvm参数加上以下参数 14 | 15 | ```shell 16 | --add-opens java.base/sun.reflect.annotation=ALL-UNNAMED 17 | ``` -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/021.🧁环境支持/020.Springboot支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌿Springboot支持度 3 | date: 2023-07-21 18:20:37 4 | permalink: /pages/v2.10.X/891e0f/ 5 | --- 6 | 7 | LiteFlow要求的Springboot的最低的版本是2.0。 8 | 9 | 支持的范围是Springboot 2.X ~ Springboot 3.X。 10 | 11 | 当然如果你使用了最新的Springboot 3.X,相应的JDK版本也要切换为JDK17。 12 | 13 | 如果你想使用Springboot快速开始学习,请参考[Springboot场景安装运行](/pages/v2.10.X/df6982/)。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/021.🧁环境支持/030.Spring的支持度.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌱Spring的支持度 3 | date: 2023-07-21 18:24:20 4 | permalink: /pages/v2.10.X/2d12db/ 5 | --- 6 | 7 | 如果你不使用Springboot,只使用Spring。 8 | 9 | LiteFlow要求的Spring的最低版本为Spring 5.0。 10 | 11 | 支持的范围是Spring 5.X ~ Spring 6.X。 12 | 13 | 当然如果你使用了最新的Spring 6.X,相应的JDK版本也要切换为JDK17。 14 | 15 | 如果你想使用Spring快速开始学习,请参考[Spring场景安装运行](/pages/v2.10.X/0a4573/)。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/v2.10.X/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.10.X/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.10.7 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.10.X/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.10.7 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/v2.10.X/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.10.X/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/v2.10.X/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.10.X/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.10.7 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-06 23:15:50 4 | permalink: /pages/v2.10.X/151524/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("config/flow.el.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/v2.10.X/b5065a/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.10.X/74b4bf/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/040.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/v2.10.X/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/055.🔗常规组件/030.条件组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📌条件组件 3 | date: 2022-08-26 12:25:04 4 | permalink: /pages/v2.10.X/cb0b59/ 5 | --- 6 | 7 | LiteFlow从2.8.5版本开始,提供了条件组件的定义。 8 | 9 | 条件组件,也可以称之为IF组件,返回是一个true/false。可用于`IF...ELIF...ELSE`等关键字。 10 | 11 | 关于`IF...ELIF...ELSE`表达式的用法,可以参考[条件编排](/pages/v2.10.X/e76999/)这一章。 12 | 13 | 比如一个IF三元表达式,如下所示,x就是IF组件,为真,执行a,为假,执行b: 14 | 15 | ```xml 16 | 17 | IF(x, a, b); 18 | 19 | ``` 20 | 21 | x节点的定义,需要继承`NodeIfComponent`: 22 | 23 | ```java 24 | @Component("x") 25 | public class XCmp extends NodeIfComponent { 26 | @Override 27 | public boolean processIf() throws Exception { 28 | //do your biz 29 | return true; 30 | } 31 | } 32 | ``` 33 | 34 | 条件节点的内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.10.X/8486fb/)这一章。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/v2.10.X/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/v2.10.X/a590ee/ 5 | --- 6 | 7 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 8 | 9 | ```xml 10 | 11 | THEN(a, b, c, d); 12 | 13 | ``` 14 | 15 | 当然你如果嵌套来写,也是和上面等价的 16 | ```xml 17 | 18 | THEN(a, b, THEN(c, d)); 19 | 20 | ``` 21 | 22 | :::tip 图示 23 | 24 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/060.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/v2.10.X/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/v2.10.X/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/090.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/v2.10.X/f3dc09/ 5 | --- 6 | 7 | 在LiteFlow的EL规则写法里,你也可以写注释。注释的写法有2种 8 | 9 | 单行注释 10 | 11 | ```xml 12 | 13 | 14 | //我是注释 15 | THEN(a, b, WHEN(c, d)) 16 | 17 | ``` 18 | 19 | 多行注释 20 | 21 | ```xml 22 | 23 | THEN( 24 | //我是注释 25 | a, 26 | b, 27 | /** 28 | * 我是多行注释 29 | * 我是多行注释 30 | **/ 31 | WHEN(c, d) 32 | ) 33 | 34 | ``` -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/100.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/v2.10.X/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/060.🧩EL规则的写法/110.验证规则.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔆验证规则 3 | date: 2022-12-01 00:10:24 4 | permalink: /pages/v2.10.X/395fd0/ 5 | --- 6 | 7 | LiteFlow从v2.9.4版本开始,为规则EL提供了一个验证的方法接口,用于验证EL是不是能被正确解析。 8 | 9 | 你可以调用如下方法来进行验证: 10 | 11 | ```java 12 | public void yourMethod() { 13 | boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)"); 14 | ... 15 | } 16 | ``` -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/070.🌮数据上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/v2.10.X/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/v2.10.X/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/080.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/v2.10.X/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/080.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/v2.10.X/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/v2.10.X/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/085.🍋脚本组件/050.动态刷新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍘动态刷新脚本 3 | date: 2022-10-05 22:47:47 4 | permalink: /pages/v2.10.X/cbcb14/ 5 | --- 6 | 7 | 其实在[平滑热刷新](/pages/v2.10.X/204d71/)这章所描述的刷新整个规则已经包含了脚本的热刷新。 8 | 9 | 但是如果你要仅仅热刷新脚本的话,这里也提供了单独的方式,你可以调用如下的代码进行脚本的热刷新: 10 | 11 | ```java 12 | ScriptExecutorFactory.loadInstance().getScriptExecutor().load(nodeId, script); 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/086.🍇声明式组件/010.什么叫声明式组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥭什么叫声明式组件 3 | date: 2022-10-05 23:19:02 4 | permalink: /pages/v2.10.X/46f0fa/ 5 | --- 6 | 7 | 何谓声明式组件? 8 | 9 | 之前章节介绍的普通组件和条件组件,在写法上需要你自己去定义一个类去继承`NodeComponent`或者`NodeSwitchComponent`。这样一方面造成了耦合,另一方面由于java是单继承制,所以使用者就无法再去继承自己的类了,在自由度上就少了很多玩法。 10 | 11 | 声明式组件这一特性允许你自定义的组件不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。 12 | 13 | 甚至于你可以用一个类去定义多个组件,仅仅依靠注解就可以完成,这个特性也叫做方法级别式声明。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/090.🎲用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/v2.10.X/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于以下两点: 16 | 17 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。 19 | 20 | ::: 21 | 22 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 23 | 24 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.10.X/204d71/)。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/100.🎨高级特性/031.本地规则文件监听.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍌本地规则文件监听 3 | date: 2023-03-16 22:59:58 4 | permalink: /pages/v2.10.X/f8aa79/ 5 | --- 6 | 7 | 首先,在LiteFlow的配置`liteflow.rule-source`中,不光可以配置项目内的规则文件,其实还可以配置本地磁盘上的文件的,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=/Users/bryan31/liteflow/test/flow.xml 11 | ``` 12 | 13 | 但是当你本地规则文件改变了的情况下,你的项目是无法获知的,你只能通过手动刷新规则去实现热刷新(详细请阅读[平滑热刷新](/pages/v2.10.X/204d71/))。 14 | 15 | LiteFlow从2.10.0开始,增加了对本地规则文件监听的特性。 16 | 17 | 你只需要配置`liteflow.enable-monitor-file=true`,即可开启自动对文件的监听特性。文件改动,你的项目无需做任何事,立马自动刷新整个规则。非常方便。 18 | 19 | 在各个环境中如何配置,前面的章节也提到过,详情请阅读[配置项](/pages/v2.10.X/b70ec8/)这一大章节。 -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/100.🎨高级特性/035.替补组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥠替补组件 3 | date: 2022-07-27 00:07:01 4 | permalink: /pages/v2.10.X/79289a/ 5 | --- 6 | 7 | 如果你在编排时写了一个不存在的组件,通常情况下是会报错的。 8 | 9 | 比如你的系统中只定义了A,B,C三个组件。但是你在规则里这样写: 10 | 11 | ```xml 12 | 13 | THEN(A, B, C, D); 14 | 15 | ``` 16 | 17 | 由于D组件不存在,所以启动时会报错。 18 | 19 | 替补组件的意义是,当你写了一个不存在的组件时,在解析时会自动解析到你指定的替补组件上,由这个替补组件来代替你不存在的组件来执行,这样就不会报错了。 20 | 21 | 你需要在配置中指定你的替补组件: 22 | 23 | ```properties 24 | liteflow.substitute-cmp-class=com.yomahub.liteflow.test.substituteNode.cmp.SubCmp 25 | ``` 26 | 27 | 替补组件本身定义和其他的组件没有任何区别,如果在spring体系中,需要被注册到上下文,如果非spring环境,也需要在规则文件中定义。 28 | 29 | 当你指定了替补组件后,你的规则文件需要这么写: 30 | 31 | ```xml 32 | 33 | THEN(A, B, C, node("D")); 34 | 35 | ``` 36 | 37 | :::tip 38 | 这里注意下,如果不加node关键字,不会自动路由到替补组件的,所以一定得加。 39 | ::: 40 | 41 | -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/100.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/v2.10.X/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.el.xml,multipleType/flow.el.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/100.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/v2.10.X/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/100.🎨高级特性/190.XML的DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧉XML的DTD 3 | date: 2022-10-24 12:50:29 4 | permalink: /pages/v2.10.X/0066ae/ 5 | --- 6 | 7 | LiteFlow从2.9.1版本起,对XML增加了DTD,方便在XML里作一些检查和提醒约束。 8 | 9 | 具体引用方法为: 10 | 11 | ```xml {2} 12 | 13 | 14 | 15 | 16 | THEN(a,b,WHEN(c,d)); 17 | 18 | 19 | ``` 20 | 21 | :::tip 22 | 当然不加也是没有关系的,因为LiteFlow xml节点非常简单,并没有很多的节点标签需要记忆。 23 | ::: -------------------------------------------------------------------------------- /docs/09.v2.10.X文档/110.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/v2.10.X/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | ## DEMO案例1 10 | 11 | > [DEMO案例1](https://github.com/bryan31/message-demo) 12 | 13 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 14 | 15 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 16 | 17 | ## DEMO案例2 18 | 19 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 20 | 21 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 22 | 23 | 这个示例工程提供了一个简单的界面,供大家测试之用 24 | 25 | ![example-web](/img/example-web.png) 26 | 27 | ## 外置规则存储案例 28 | 29 | > [外置规则存储案例](https://github.com/bryan31/liteflow-ext-rule-demo) 30 | 31 | 如果你想把规则放到DB里,或者zk/nacos/etcd里,此案例为一个简单的DEMO,你可以根据此案例的演示来进行接入。 32 | 33 | -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/v2.9.X/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.9.X/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.9.7 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.9.X/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.9.7 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/v2.9.X/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.9.X/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/v2.9.X/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.9.X/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.9.7 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-06 23:15:50 4 | permalink: /pages/v2.9.X/151524/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("config/flow.el.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/v2.9.X/b5065a/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.9.X/74b4bf/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/040.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/v2.9.X/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/055.🔗常规组件/030.条件组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📌条件组件 3 | date: 2022-08-26 12:25:04 4 | permalink: /pages/v2.9.X/cb0b59/ 5 | --- 6 | 7 | LiteFlow从2.8.5版本开始,提供了条件组件的定义。 8 | 9 | 条件组件,也可以称之为IF组件,返回是一个true/false。可用于`IF...ELIF...ELSE`等关键字。 10 | 11 | 关于`IF...ELIF...ELSE`表达式的用法,可以参考[条件编排](/pages/v2.9.X/e76999/)这一章。 12 | 13 | 比如一个IF三元表达式,如下所示,x就是IF组件,为真,执行a,为假,执行b: 14 | 15 | ```xml 16 | 17 | IF(x, a, b); 18 | 19 | ``` 20 | 21 | x节点的定义,需要继承`NodeIfComponent`: 22 | 23 | ```java 24 | @Component("x") 25 | public class XCmp extends NodeIfComponent { 26 | @Override 27 | public boolean processIf() throws Exception { 28 | //do your biz 29 | return true; 30 | } 31 | } 32 | ``` 33 | 34 | 条件节点的内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.9.X/8486fb/)这一章。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/055.🔗常规组件/040.次数循环组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬次数循环组件 3 | date: 2022-10-06 15:04:44 4 | permalink: /pages/v2.9.X/5f971f/ 5 | --- 6 | 7 | ## 用法 8 | 9 | LiteFlow从v2.9.0开始,提供了次数循环组件。返回的是一个int值的循环次数。 主要用于`FOR...DO...`表达式。 10 | 11 | 关于`FOR...DO...`表达式的用法,可以参考[循环编排](/pages/v2.9.X/fbf715/)这一章。 12 | 13 | 比如要对一段表达式进行固定次数的循环操作,可以如下定义: 14 | 15 | ```xml 16 | 17 | FOR(f).DO(THEN(a, b)); 18 | 19 | ``` 20 | 21 | f节点的定义,需要继承`NodeForComponent`,需要实现`processFor`方法: 22 | 23 | ```java 24 | @LiteflowComponent("f") 25 | public class FCmp extends NodeForComponent { 26 | @Override 27 | public int processFor() throws Exception { 28 | //这里根据业务去返回for的结果 29 | } 30 | } 31 | ``` 32 | 33 | 内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.9.X/8486fb/)这一章。 34 | 35 | ## 循环下标获取 36 | 37 | 关键字`FOR...DO...`中`DO`里面的任意节点都可以通过`this.getLoopIndex()`来获得下标。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/055.🔗常规组件/050.条件循环组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ⛓条件循环组件 3 | date: 2022-10-06 17:11:06 4 | permalink: /pages/v2.9.X/e6995e/ 5 | --- 6 | 7 | ## 用法 8 | 9 | LiteFlow从v2.9.0开始,支持了条件循环组件,主要用于`WHILE...DO...`表达式。 10 | 11 | 关于`WHILE...DO...`表达式的用法,可以参考[循环编排](/pages/v2.9.X/fbf715/)这一章。 12 | 13 | 比如要对一段表达式进行条件循环操作,可以如下定义: 14 | 15 | ```xml 16 | 17 | WHILE(w).DO(THEN(a, b)); 18 | 19 | ``` 20 | 21 | w节点的定义,需要继承`NodeWhileComponent`,需要实现`processWhile`方法: 22 | 23 | ```java 24 | @LiteflowComponent("w") 25 | public class WCmp extends NodeWhileComponent { 26 | @Override 27 | public boolean processWhile() throws Exception { 28 | //这里根据业务去返回while的结果 29 | } 30 | } 31 | ``` 32 | 33 | 内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.9.X/8486fb/)这一章。 34 | 35 | ## 循环下标获取 36 | 37 | 关键字`WHILE...DO...`中`DO`里面的任意节点都可以通过`this.getLoopIndex()`来获得下标。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/v2.9.X/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/v2.9.X/a590ee/ 5 | --- 6 | 7 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 8 | 9 | ```xml 10 | 11 | THEN(a, b, c, d); 12 | 13 | ``` 14 | 15 | 当然你如果嵌套来写,也是和上面等价的 16 | ```xml 17 | 18 | THEN(a, b, THEN(c, d)); 19 | 20 | ``` 21 | 22 | :::tip 图示 23 | 24 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/060.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/v2.9.X/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/v2.9.X/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/090.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/v2.9.X/f3dc09/ 5 | --- 6 | 7 | 在LiteFlow的EL规则写法里,你也可以写注释。注释的写法有2种 8 | 9 | 单行注释 10 | 11 | ```xml 12 | 13 | 14 | //我是注释 15 | THEN(a, b, WHEN(c, d)) 16 | 17 | ``` 18 | 19 | 多行注释 20 | 21 | ```xml 22 | 23 | THEN( 24 | //我是注释 25 | a, 26 | b, 27 | /** 28 | * 我是多行注释 29 | * 我是多行注释 30 | **/ 31 | WHEN(c, d) 32 | ) 33 | 34 | ``` -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/100.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/v2.9.X/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/060.🧩EL规则的写法/110.验证规则.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🔆验证规则 3 | date: 2022-12-01 00:10:24 4 | permalink: /pages/v2.9.X/395fd0/ 5 | --- 6 | 7 | LiteFlow从v2.9.4版本开始,为规则EL提供了一个验证的方法接口,用于验证EL是不是能被正确解析。 8 | 9 | 你可以调用如下方法来进行验证: 10 | 11 | ```java 12 | public void yourMethod() { 13 | boolean isValid = LiteFlowChainELBuilder.validate("THEN(a, b, h)"); 14 | ... 15 | } 16 | ``` -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/070.🌮数据上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/v2.9.X/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/v2.9.X/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/080.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/v2.9.X/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/080.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/v2.9.X/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/v2.9.X/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/085.🍋脚本组件/050.动态刷新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍘动态刷新脚本 3 | date: 2022-10-05 22:47:47 4 | permalink: /pages/v2.9.X/cbcb14/ 5 | --- 6 | 7 | 其实在[平滑热刷新](/pages/v2.9.X/204d71/)这章所描述的刷新整个规则已经包含了脚本的热刷新。 8 | 9 | 但是如果你要仅仅热刷新脚本的话,这里也提供了单独的方式,你可以调用如下的代码进行脚本的热刷新: 10 | 11 | ```java 12 | ScriptExecutorFactory.loadInstance().getScriptExecutor().load(nodeId, script); 13 | ``` 14 | -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/086.🍇声明式组件/010.什么叫声明式组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥭什么叫声明式组件 3 | date: 2022-10-05 23:19:02 4 | permalink: /pages/v2.9.X/46f0fa/ 5 | --- 6 | 7 | 何谓声明式组件? 8 | 9 | 之前章节介绍的普通组件和条件组件,在写法上需要你自己去定义一个类去继承`NodeComponent`或者`NodeSwitchComponent`。这样一方面造成了耦合,另一方面由于java是单继承制,所以使用者就无法再去继承自己的类了,在自由度上就少了很多玩法。 10 | 11 | 声明式组件这一特性允许你自定义的组件不继承任何类和实现任何接口,普通的类也可以依靠注解来完成LiteFlow组件的声明。 12 | 13 | 甚至于你可以用一个类去定义多个组件,仅仅依靠注解就可以完成,这个特性也叫做方法级别式声明。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/090.🎲用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/v2.9.X/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于以下两点: 16 | 17 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。 19 | 20 | ::: 21 | 22 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 23 | 24 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.9.X/204d71/)。 -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/100.🎨高级特性/035.替补组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥠替补组件 3 | date: 2022-07-27 00:07:01 4 | permalink: /pages/v2.9.X/79289a/ 5 | --- 6 | 7 | 如果你在编排时写了一个不存在的组件,通常情况下是会报错的。 8 | 9 | 比如你的系统中只定义了A,B,C三个组件。但是你在规则里这样写: 10 | 11 | ```xml 12 | 13 | THEN(A, B, C, D); 14 | 15 | ``` 16 | 17 | 由于D组件不存在,所以启动时会报错。 18 | 19 | 替补组件的意义是,当你写了一个不存在的组件时,在解析时会自动解析到你指定的替补组件上,由这个替补组件来代替你不存在的组件来执行,这样就不会报错了。 20 | 21 | 你需要在配置中指定你的替补组件: 22 | 23 | ```properties 24 | liteflow.substitute-cmp-class=com.yomahub.liteflow.test.substituteNode.cmp.SubCmp 25 | ``` 26 | 27 | 替补组件本身定义和其他的组件没有任何区别,如果在spring体系中,需要被注册到上下文,如果非spring环境,也需要在规则文件中定义。 28 | 29 | 当你指定了替补组件后,你的规则文件需要这么写: 30 | 31 | ```xml 32 | 33 | THEN(A, B, C, node("D")); 34 | 35 | ``` 36 | 37 | :::tip 38 | 这里注意下,如果不加node关键字,不会自动路由到替补组件的,所以一定得加。 39 | ::: 40 | 41 | -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/100.🎨高级特性/050.组件标签.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍍组件标签 3 | date: 2022-07-03 00:32:36 4 | permalink: /pages/v2.9.X/0f788f/ 5 | --- 6 | 7 | 你可以在规则表达式里给每个组件添加运行时的标签值,用`tag`关键字表示: 8 | 9 | ```xml 10 | 11 | THEN( 12 | a.tag("tag1"), 13 | b.tag("tag2"), 14 | c.tag("tag3") 15 | ); 16 | 17 | ``` 18 | 19 | 这样,你在代码里可以通过`this.getTag()`获取到当前的标签,这在有些时候非常有用,尤其是当多个相同组件编排时,你可以根据`tag`来获知到不同的参数。或者根据tag标签来给相同的组件作不同的判断。 20 | 21 | ```java 22 | @LiteflowComponent("b") 23 | public class BCmp extends NodeComponent { 24 | @Override 25 | public void process() { 26 | String tag = this.getTag(); 27 | ... 28 | } 29 | } 30 | ``` 31 | 32 | 当然,以下这种例子也是可以的: 33 | 34 | ```xml 35 | 36 | THEN( 37 | a.tag("1"), a.tag("2"), a.tag("3"), a.tag("4"), a.tag("5"), a.tag("6") 38 | ); 39 | 40 | ``` -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/100.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/v2.9.X/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.el.xml,multipleType/flow.el.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/100.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/v2.9.X/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/100.🎨高级特性/190.XML的DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧉XML的DTD 3 | date: 2022-10-24 12:50:29 4 | permalink: /pages/v2.9.X/0066ae/ 5 | --- 6 | 7 | LiteFlow从2.9.1版本起,对XML增加了DTD,方便在XML里作一些检查和提醒约束。 8 | 9 | 具体引用方法为: 10 | 11 | ```xml {2} 12 | 13 | 14 | 15 | 16 | THEN(a,b,WHEN(c,d)); 17 | 18 | 19 | ``` 20 | 21 | :::tip 22 | 当然不加也是没有关系的,因为LiteFlow xml节点非常简单,并没有很多的节点标签需要记忆。 23 | ::: -------------------------------------------------------------------------------- /docs/10.v2.9.X文档/110.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/v2.9.X/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | ## DEMO案例1 10 | 11 | > [DEMO案例1](https://github.com/bryan31/message-demo) 12 | 13 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 14 | 15 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 16 | 17 | ## DEMO案例2 18 | 19 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 20 | 21 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 22 | 23 | 这个示例工程提供了一个简单的界面,供大家测试之用 24 | 25 | ![example-web](/img/example-web.png) 26 | 27 | ## 外置规则存储案例 28 | 29 | > [外置规则存储案例](https://github.com/bryan31/liteflow-ext-rule-demo) 30 | 31 | 如果你想把规则放到DB里,或者zk/nacos/etcd里,此案例为一个简单的DEMO,你可以根据此案例的演示来进行接入。 32 | 33 | -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/005.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:49:31 4 | permalink: /pages/v2.8.X/631fa1/ 5 | --- 6 | 7 | 这章是一个快速入门的指引,帮助你用最快的时间去立马体验LiteFlow。 8 | 9 | :::note 10 | 大家可以根据自己的实际环境从下面的Hello World里选择一种。 11 | 12 | 建议跟着文档操作一遍。你会初步感受到LiteFlow的优雅之处。 13 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/010.🌿Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.8.X/df6982/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.8.5 14 | 15 | ``` 16 | 17 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.8.X/0a4573/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.8.5 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/020.🌱Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🛫执行 3 | date: 2022-06-02 19:49:57 4 | permalink: /pages/v2.8.X/0e0fb5/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别,你可以在你的任何受Spring托管的类里注入`FlowExecutor`进行执行: 8 | 9 | ```java 10 | @Component 11 | public class YourClass{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[数据上下文](/pages/v2.8.X/74b4bf/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-04 00:00:04 4 | permalink: /pages/v2.8.X/522432/ 5 | --- 6 | 7 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 8 | 9 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 10 | 11 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 12 | - LiteflowComponent在非Spring体系下无法使用 13 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/030.🍟快速开始(Hello world)/030.🌵其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🧬依赖 3 | date: 2022-06-15 11:36:43 4 | permalink: /pages/v2.8.X/8760c4/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.8.5 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/040.🍢配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-06 21:42:12 4 | permalink: /pages/v2.8.X/b70ec8/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | **你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。** 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/055.🔗常规组件/020.选择组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ✂️选择组件 3 | date: 2022-06-29 17:58:54 4 | permalink: /pages/v2.8.X/c0f5d7/ 5 | --- 6 | 7 | 在实际业务中,往往要通过动态的业务逻辑判断到底接下去该执行哪一个节点,这就引申出了选择节点,选择节点可以用于`SWITCH`关键字中。 8 | 9 | 关于SWITCH表达式的用法,可以参考[选择编排](/pages/v2.8.X/d90483/)一章。 10 | 11 | 比如如下表达式: 12 | ```xml 13 | 14 | SWITCH(a).to(b, c); 15 | 16 | ``` 17 | 18 | 选择节点a需要继承`NodeSwitchComponent`类 19 | 20 | 需要实现方法`processSwitch`,这个方法需要返回`String`类型,就是具体的结果,以下代码示例了选择到了c节点。 21 | 22 | ```java 23 | @LiteflowComponent("a") 24 | public class ACmp extends NodeSwitchComponent { 25 | 26 | @Override 27 | public String processSwitch() throws Exception { 28 | System.out.println("Acomp executed!"); 29 | return "c"; 30 | } 31 | } 32 | ``` 33 | 34 | 选择节点的内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.8.X/8486fb/)这一章。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/055.🔗常规组件/030.条件组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 📌条件组件 3 | date: 2022-08-26 12:25:04 4 | permalink: /pages/v2.8.X/cb0b59/ 5 | --- 6 | 7 | LiteFlow从2.8.5版本开始,提供了条件组件的定义。 8 | 9 | 条件组件,也可以称之为IF组件,返回是一个true/false。可用于`IF...ELIF...ELSE`等关键字。 10 | 11 | 关于`IF...ELIF...ELSE`表达式的用法,可以参考[条件编排](/pages/v2.8.X/e76999/)这一章。 12 | 13 | 比如一个IF三元表达式,如下所示,x就是IF组件,为真,执行a,为假,执行b: 14 | 15 | ```xml 16 | 17 | IF(x, a, b); 18 | 19 | ``` 20 | 21 | x节点的定义,需要继承`NodeIfComponent`类: 22 | 23 | ```java 24 | @Component("x") 25 | public class XCmp extends NodeIfComponent { 26 | @Override 27 | public boolean processIf() throws Exception { 28 | //do your biz 29 | return true; 30 | } 31 | } 32 | ``` 33 | 34 | 条件节点的内部可以覆盖的方法和this关键字可调用的方法见[普通组件](/pages/v2.8.X/8486fb/)这一章。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/060.🧩EL规则的写法/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-06-29 15:30:16 4 | permalink: /pages/v2.8.X/16eca9/ 5 | --- 6 | 7 | 在本章,将说明如何撰写规则表达式。 8 | 9 | LiteFlow在2.8.X版本中设计了非常强大的规则表达式。一切复杂的流程在LiteFlow表达式的加持下,都异常丝滑简便。 10 | 11 | 你只需要很短的时间即可学会如何写一个很复杂流程的表达式。 12 | 13 | :::tip 14 | 本章是整个规则编排的重点,建议仔细看下。 15 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/060.🧩EL规则的写法/020.串行编排.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌴串行编排 3 | date: 2022-06-29 15:28:24 4 | permalink: /pages/v2.8.X/a590ee/ 5 | --- 6 | 7 | 如果你要依次执行a,b,c,d四个组件,你可以用`THEN`关键字,需要注意的是,`THEN`必须大写。 8 | 9 | ```xml 10 | 11 | THEN(a, b, c, d); 12 | 13 | ``` 14 | 15 | 当然你如果嵌套来写,也是和上面等价的 16 | ```xml 17 | 18 | THEN(a, b, THEN(c, d)); 19 | 20 | ``` 21 | 22 | :::tip 图示 23 | 24 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/060.🧩EL规则的写法/060.使用子变量.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍂使用子变量 3 | date: 2022-07-01 19:01:33 4 | permalink: /pages/v2.8.X/71ff49/ 5 | --- 6 | 7 | 如果你看过上一章[使用子流程](/pages/v2.8.X/dc5df7/)后再来看这章,你会觉得其实使用子流程都是多此一举! 8 | 9 | 因为LiteFlow新的表达式语法可以直接让你在规则里定义子流程变量! 10 | 11 | 这可以说是新版语法中一个骚操作了! 12 | 13 | 还是这个流程: 14 | 15 | :::tip 图示 16 | 17 | ::: 18 | 19 | 我们如果定义子流程变量,可以这么写: 20 | 21 | ```xml 22 | 23 | t1 = THEN(C, WHEN(J, K)); 24 | w1 = WHEN(Q, THEN(P, R)).id("w01"); 25 | t2 = THEN(H, I); 26 | 27 | THEN( 28 | A, B, 29 | WHEN(t1, D, t2), 30 | SWITCH(X).to(M, N, w1), 31 | Z 32 | ); 33 | 34 | ``` 35 | 36 | 看到这里的你,是不是有种恍然大悟的感觉呢?用这种方式,其实子流程都显得黯然失色了。对于逻辑能力强大的你来说,利用这套表达式是不是任意复杂流程都能写出来了呢。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/060.🧩EL规则的写法/090.关于注释.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌰关于注释 3 | date: 2022-07-19 10:34:21 4 | permalink: /pages/v2.8.X/f3dc09/ 5 | --- 6 | 7 | 在LiteFlow的EL规则写法里,你也可以写注释。注释的写法有2种 8 | 9 | 单行注释 10 | 11 | ```xml 12 | 13 | 14 | //我是注释 15 | THEN(a, b, WHEN(c, d)) 16 | 17 | ``` 18 | 19 | 多行注释 20 | 21 | ```xml 22 | 23 | THEN( 24 | //我是注释 25 | a, 26 | b, 27 | /** 28 | * 我是多行注释 29 | * 我是多行注释 30 | **/ 31 | WHEN(c, d) 32 | ) 33 | 34 | ``` -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/060.🧩EL规则的写法/100.组件名包装.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🐚组件名包装 3 | date: 2022-07-26 23:58:18 4 | permalink: /pages/v2.8.X/2df3d9/ 5 | --- 6 | 7 | LiteFlow的组件名是有规范的,不能以数字开头,并且中间不能有运算符号的出现。 8 | 9 | 比如这些都是不行的:`88Cmp`,`cmp-11`, `user=123`。 10 | 11 | 以下这种定义在启动时是会报错的: 12 | ```xml 13 | 14 | THEN(a, b, 88Cmp, cmp-11); 15 | 16 | ``` 17 | 18 | 19 | 但是有些业务中组件名你需要自动生成,会打破这个规则,怎么办呢? 20 | 21 | LiteFlow也提供了一种组件包装语法,让你可以用任意形式的组件名。 22 | 23 | 你需要使用`node`关键字: 24 | 25 | ```xml 26 | 27 | THEN(a, b, node("88Cmp"), node("cmp-11")); 28 | 29 | ``` 30 | 31 | 这样就可以了。 32 | 33 | 当然a本身和node("a")是等价的。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/070.🌮数据上下文/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 23:35:36 4 | permalink: /pages/v2.8.X/74b4bf/ 5 | --- 6 | 7 | :::tip 概念 8 | 在执行器执行流程时会分配数据上下文实例给这个请求。不同请求的数据上下文实例是完全隔离的。里面存放着此请求所有的用户数据。不同的组件之间是不传递参数的,所有的数据交互都是通过这个数据上下文来实现的。 9 | ::: 10 | 11 | 数据上下文这个概念在LiteFlow框架中非常重要,你所有的业务数据都是放在数据上下文中。 12 | 13 | 14 | 要做到可编排,一定是消除每个组件差异性的。如果每个组件出参入参都不一致,那就没法编排了。 15 | 16 | LiteFlow对此有独特的设计理念,平时我们写瀑布流的程序时,A调用B,那A一定要把B所需要的参数传递给B,而在LiteFlow框架体系中,每个组件的定义中是不需要接受参数的,也无任何返回的。 17 | 18 | 每个组件只需要从数据上下文中获取自己关心的数据即可,而不用关心此数据是由谁提供的,同样的,每个组件也只要把自己执行所产生的结果数据放到数据上下文中即可,也不用关心此数据到底是提供给谁用的。这样一来,就从数据层面一定程度的解耦了。从而达到可编排的目的。关于这个理念,也在[LiteFlow简介](/pages/v2.8.X/5816c5/)中的设计原则有提到过,给了一个形象的例子,大家可以再去看看。 19 | 20 | 一旦在数据上下文中放入数据,整个链路中的任一节点都是可以取到的。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/070.🌮数据上下文/030.用初始化好的上下文传入.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪶用初始化好的上下文传入 3 | date: 2022-08-17 23:30:42 4 | permalink: /pages/v2.8.X/f05ed6/ 5 | --- 6 | 7 | 你可能注意到了,在执行器执行流程的时候,需要传入流程入参和上下文class定义(一个或多个)两种参数。 8 | 9 | 关于流程入参在[流程入参](/pages/v2.8.X/563b67/)章节有具体说明。 10 | 11 | 对于数据上下文而言,初始化动作是由框架来处理的。也就是说,在你执行第一个组件时,上下文对象里面是没有用户数据的。而你的流程入参是用`this.getRequestData()`获取的,**这部分不包含在上下文里面**。 12 | 13 | 如果你需要将流程入参放入上下文,那这一动作是需要你自己来完成的。 14 | 15 | 可能会有人觉得这一步骤略显繁琐。 16 | 17 | LiteFlow从2.8.4版本开始,允许用户传入一个或多个已经初始化好的bean作为上下文,而不是传入class对象。 18 | 19 | 在拿到`FlowExecutor`之后,你可以像如下一样,传入已经初始化好的bean作为上下文(当然也支持多上下文,这里只演示单上下文): 20 | 21 | ```java 22 | OrderContext orderContext = new OrderContext(); 23 | orderContext.setOrderNo("SO11223344"); 24 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", null, orderContext); 25 | ``` 26 | 27 | 如果你这样调用,等于你的上下文中已经初始化好了一个一些数据。从某种意义上来说,这已经等同于`流程入参`了,所以使用这个的时候,你完全可以不传流程入参了。 28 | 29 | -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/080.🛩执行器/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-01 22:30:36 4 | permalink: /pages/v2.8.X/90b2a5/ 5 | --- 6 | 7 | 上面的几章节说明了,规则文件如何配置,如何定义组件,如何撰写规则。 8 | 9 | 相信你已经结合Hello World章节做了初步的尝试。 10 | 11 | 这章节将会详细介绍执行器。 12 | 13 | 执行器是一个流程的触发点,你可以在代码的任意地方用执行器进行执行流程。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/080.🛩执行器/030.流程入参.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🎢流程入参 3 | date: 2022-07-02 00:38:44 4 | permalink: /pages/v2.8.X/563b67/ 5 | --- 6 | 7 | 在实际使用中,很多同学会对流程入参这一概念有所疑惑。 8 | 9 | 在一个流程中,总会有一些初始的参数,比如订单号,用户Id等等一些的初始参数。这时候需要通过以下方法的第二个参数传入: 10 | 11 | ```java 12 | public LiteflowResponse execute2Resp(String chainId, Object param, Class... contextBeanClazzArray) 13 | ``` 14 | 15 | 请注意,这个流程入参,可以是任何对象,一般生产业务场景下,你可以把自己封装好的Bean传入。 16 | 17 | 这个值你可以通过以下的方法在组件中拿到: 18 | 19 | ```java 20 | @LiteflowComponent("a") 21 | public class ACmp extends NodeComponent { 22 | 23 | @Override 24 | public void process() { 25 | YourBean requestBean = this.getRequestData(); 26 | } 27 | } 28 | ``` 29 | 30 | :::tip 31 | 在这里,流程入参可以是任何对象,如果你把数据上下文的实例传入了,并不意味着你拿到的相同类型的数据上下文中就是有值的。因为这2个对象根本就是2个实例。 32 | 流程入参只能通过`this.getRequestData()`去拿。 33 | 34 | 如果你真实目的是想提前传入初始化好的上下文对象,可以参考[用初始化好的上下文传入](/pages/v2.8.X/f05ed6/)这一章节。 35 | ::: -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/090.🎲用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍄说明 3 | date: 2022-07-02 09:56:32 4 | permalink: /pages/v2.8.X/9aa85a/ 5 | --- 6 | 7 | 之前的章节讲述的是通过规则文件去构造流程。 8 | 9 | LiteFlow也支持用代码去构造流程,你可以不用写xml/json/yaml的规则文件,ruleSource不用去定义。完全用代码去构建。 10 | 11 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 12 | 13 | ::: tip 意义 14 | 15 | 提供动态代码构造的API意义在于以下两点: 16 | 17 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 18 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。 19 | 20 | ::: 21 | 22 | LiteFlow设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 23 | 24 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.8.X/204d71/)。 -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/100.🎨高级特性/035.替补组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🥠替补组件 3 | date: 2022-07-27 00:07:01 4 | permalink: /pages/v2.8.X/79289a/ 5 | --- 6 | 7 | 如果你在编排时写了一个不存在的组件,通常情况下是会报错的。 8 | 9 | 比如你的系统中只定义了A,B,C三个组件。但是你在规则里这样写: 10 | 11 | ```xml 12 | 13 | THEN(A, B, C, D); 14 | 15 | ``` 16 | 17 | 由于D组件不存在,所以启动时会报错。 18 | 19 | 替补组件的意义是,当你写了一个不存在的组件时,在解析时会自动解析到你指定的替补组件上,由这个替补组件来代替你不存在的组件来执行,这样就不会报错了。 20 | 21 | 你需要在配置中指定你的替补组件: 22 | 23 | ```properties 24 | liteflow.substitute-cmp-class=com.yomahub.liteflow.test.substituteNode.cmp.SubCmp 25 | ``` 26 | 27 | 替补组件本身定义和其他的组件没有任何区别,如果在spring体系中,需要被注册到上下文,如果非spring环境,也需要在规则文件中定义。 28 | 29 | 当你指定了替补组件后,你的规则文件需要这么写: 30 | 31 | ```xml 32 | 33 | THEN(A, B, C, node("D")); 34 | 35 | ``` 36 | 37 | :::tip 38 | 这里注意下,如果不加node关键字,不会自动路由到替补组件的,所以一定得加。 39 | ::: 40 | 41 | -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/100.🎨高级特性/050.组件标签.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍍组件标签 3 | date: 2022-07-03 00:32:36 4 | permalink: /pages/v2.8.X/0f788f/ 5 | --- 6 | 7 | 你可以在规则表达式里给每个组件添加运行时的标签值,用`tag`关键字表示: 8 | 9 | ```xml 10 | 11 | THEN( 12 | a.tag("tag1"), 13 | b.tag("tag2"), 14 | c.tag("tag3") 15 | ); 16 | 17 | ``` 18 | 19 | 这样,你在代码里可以通过`this.getTag()`获取到当前的标签,这在有些时候非常有用,尤其是当多个相同组件编排时,你可以根据`tag`来获知到不同的参数。或者根据tag标签来给相同的组件作不同的判断。 20 | 21 | ```java 22 | @LiteflowComponent("b") 23 | public class BCmp extends NodeComponent { 24 | @Override 25 | public void process() { 26 | String tag = this.getTag(); 27 | ... 28 | } 29 | } 30 | ``` 31 | 32 | 当然,以下这种例子也是可以的: 33 | 34 | ```xml 35 | 36 | THEN( 37 | a.tag("1"), a.tag("2"), a.tag("3"), a.tag("4"), a.tag("5"), a.tag("6") 38 | ); 39 | 40 | ``` -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/100.🎨高级特性/150.不同格式规则加载.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🌭不同格式规则加载 3 | date: 2022-07-03 11:20:47 4 | permalink: /pages/v2.8.X/a7e02e/ 5 | --- 6 | 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如: 8 | 9 | ```properties 10 | liteflow.rule-source=multipleType/flow.el.xml,multipleType/flow.el.json 11 | ``` 12 | 13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性: 14 | 15 | ```properties 16 | liteflow.support-multiple-type=true 17 | ``` -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/100.🎨高级特性/180.简单监控.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🍥简单监控 3 | date: 2022-07-03 11:25:52 4 | permalink: /pages/v2.8.X/e59f3a/ 5 | --- 6 | 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时 8 | 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。 10 | 11 | 关于监控配置默认的参数如下: 12 | 13 | ```properties 14 | #是否启用监控 15 | liteflow.monitor.enable-log=false 16 | #监控队列的大小 17 | liteflow.monitor.queue-limit=200 18 | #监控延迟多少毫秒打印 19 | liteflow.monitor.delay=300000 20 | #监控每隔多少毫秒打印 21 | liteflow.monitor.period=300000 22 | ``` -------------------------------------------------------------------------------- /docs/15.v2.8.X文档/110.⛱测试用例以及示例/020.DEMO案例.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 🪀DEMO案例 3 | date: 2022-07-03 11:32:24 4 | permalink: /pages/v2.8.X/0a8188/ 5 | --- 6 | 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看: 8 | 9 | > [DEMO案例1](https://github.com/bryan31/message-demo) 10 | 11 | 这个案例为一个短信系统选取供应商的案例。相关配套文章链接如下: 12 | 13 | > [写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!](https://segmentfault.com/a/1190000042084710) 14 | 15 | 16 | > [DEMO案例2](https://gitee.com/bryan31/liteflow-example) 17 | 18 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。 19 | 20 | 这个示例工程提供了一个简单的界面,供大家测试之用 21 | 22 | ![example-web](/img/example-web.png) 23 | 24 | -------------------------------------------------------------------------------- /docs/2.12.4升级指南.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.12.4升级指南 3 | date: 2024-10-13 23:53:00 4 | permalink: /pages/88c2f1/ 5 | --- 6 | 7 | 如果你从2.12.X升级到2.12.4,那是非常平滑的。2.12.4是一个向下兼容的版本。 8 | 9 | 之所以要写这个升级指南。是因为在2.12.4中增加了Javax脚本,此脚本虽说是原来Java脚本的升级,但是并未覆盖原来的插件,而是独立创建了一个脚本插件。 10 | 11 | 开发者如果想把Java插件升级成Javax插件,只需要变更脚本中的接口类即可。详情可以查看:[Java脚本引擎](/pages/2b8afb/)。 12 | 13 | -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/010.Springboot场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 依赖 3 | date: 2022-05-31 23:52:51 4 | permalink: /pages/v2.7.X/fe8369/ 5 | --- 6 | 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring-boot-starter 13 | 2.7.3 14 | 15 | ``` -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/010.Springboot场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 执行 3 | date: 2022-05-31 23:45:57 4 | permalink: /pages/v2.7.X/ad3883/ 5 | --- 6 | 7 | 然后你就可以在任意的类中拿到flowExecutor,进行执行链路 8 | 9 | ```java 10 | @Component 11 | public class MainTest{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[流程上下文](/pages/v2.7.X/16f927/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/020.Spring场景安装运行/010.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 依赖 3 | date: 2022-06-01 00:12:34 4 | permalink: /pages/v2.7.X/314fee/ 5 | --- 6 | 7 | 针对于使用了Spring但没有使用SpringBoot的项目 8 | 9 | ```xml 10 | 11 | com.yomahub 12 | liteflow-spring 13 | 2.7.3 14 | 15 | ``` 16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/020.Spring场景安装运行/030.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 执行 3 | date: 2022-06-01 00:13:07 4 | permalink: /pages/v2.7.X/646cb4/ 5 | --- 6 | 7 | 和SpringBoot的执行方式一样,没有任何区别 8 | 9 | ```java 10 | @Component 11 | public class MainTest{ 12 | 13 | @Resource 14 | private FlowExecutor flowExecutor; 15 | 16 | @Test 17 | public void testConfig(){ 18 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 19 | } 20 | } 21 | ``` 22 | 23 | ::: tip 24 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[流程上下文](/pages/v2.7.X/16f927/)这一章节。 25 | ::: -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/030.其他场景安装运行/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 说明 3 | date: 2022-06-01 00:14:46 4 | permalink: /pages/v2.7.X/c5d947/ 5 | --- 6 | 7 | LiteFlow在`2.6.11`版本中对模块进行了彻底的拆分,重新开始支持了非spring的场景。 8 | 9 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。 10 | 11 | 12 | 13 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有: 14 | 15 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效 16 | - LiteflowComponent在非Spring体系下无法使用 17 | - 监控功能在非Spring体系中无法使用 -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/030.其他场景安装运行/020.依赖.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 依赖 3 | date: 2022-06-01 00:15:10 4 | permalink: /pages/v2.7.X/83cb46/ 5 | --- 6 | 7 | ```xml 8 | 9 | com.yomahub 10 | liteflow-core 11 | 2.7.3 12 | 13 | ``` 14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到 -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/030.快速开始(Hello world)/030.其他场景安装运行/040.执行.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 执行 3 | date: 2022-06-01 00:15:56 4 | permalink: /pages/v2.7.X/ac3dc2/ 5 | --- 6 | 7 | ## 初始化你的FlowExecutor执行器 8 | 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器: 10 | 11 | ```java 12 | LiteflowConfig config = new LiteflowConfig(); 13 | config.setRuleSource("base/flow.xml"); 14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config); 15 | ``` 16 | 17 | 更多配置项请参考[配置项](/pages/v2.7.X/e9ec4f/)章节。 18 | 19 | :::tip 20 | 21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。 22 | 23 | ::: 24 | 25 | ## 用FlowExecutor执行 26 | 27 | ```java 28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); 29 | ``` 30 | 31 | ::: tip 32 | 这个`DefaultContext`是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看[流程上下文](/pages/v2.7.X/16f927/)这一章节。 33 | ::: 34 | -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/035.配置项/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 说明 3 | date: 2022-06-06 21:36:19 4 | permalink: /pages/v2.7.X/82459b/ 5 | --- 6 | 7 | LiteFlow有诸多配置项,但在大多数情况下,你都不是必须得配置,因为系统有默认值。 8 | 9 | 如果你不明白此配置项是干什么用的,那么希望不要改变其默认值。 10 | 11 | 你也可以跳过此大章节,继续看下面的,如果碰到某个配置项的意义时,再来查阅此大章节。 12 | 13 | :::tip 14 | 15 | 以下三章所涵盖的配置项完全一样,只是在不同的架构环境下表现形式不同,为了方便你查看,可以选择你所熟悉的章节进行查看。 16 | 17 | ::: -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/040.规则文件/020.本地规则文件配置.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 本地规则文件配置 3 | date: 2022-06-01 11:37:46 4 | permalink: /pages/v2.7.X/a6fd84/ 5 | --- 6 | 7 | 在LiteFlow框架中,规则文件是驱动/编排整个流程的关键,用户通过指定rule-source来定位规则文件的本地路径。而rule-source也是LiteFlow框架中必须配置的参数,而其他参数都不是必须的(都有默认值)。 8 | 9 | 以下以Springboot的配置做例子,Spring以及非Spring的环境配置可以详细阅读[配置项](/pages/v2.7.X/82459b/)这章节。 10 | 11 | 12 | 13 | ## 常规配置 14 | 15 | ```properties 16 | liteflow.rule-source=config/flow.xml 17 | ``` 18 | 19 | 20 | 21 | 22 | ## 指定多个路径 23 | 24 | 规则文件之间可以用`,`或者`;`隔开: 25 | 26 | ```properties 27 | liteflow.rule-source=config/flow1.xml,config/flow2.xml,config/flow3.xml 28 | ``` 29 | 30 | 你也可以使用Spring EL表达式进行模糊匹配,加载多个配置文件: 31 | 32 | ```properties 33 | liteflow.rule-source=config/**/*.xml 34 | ``` 35 | 36 | :::tip 37 | 38 | 模糊匹配只限于Springboot/Spring体系中,非Spring环境,模糊匹配不生效 39 | 40 | ::: -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/050.用代码动态构造规则/010.说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 说明 3 | date: 2022-06-01 13:18:18 4 | permalink: /pages/v2.7.X/182a88/ 5 | --- 6 | 7 | LiteFlow从`2.6.8`版本开始支持基于方法链的代码构造链路的特性。 8 | 9 | ::: tip 10 | 11 | 通过代码构造模式,你可以不用写xml/json/yaml的规则文件。用代码来构建规则。 12 | 13 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。 14 | 15 | ::: 16 | 17 | ::: tip 意义 18 | 19 | 提供动态代码构造的API意义在于以下两点: 20 | 21 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。 22 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。 23 | 24 | ::: 25 | 26 | LiteFlow在`2.6.8`中设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。 27 | 28 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.7.X/19c886/)。 -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/060.使用详细指南/010.开启和关闭.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 开启和关闭 3 | date: 2022-06-01 13:06:23 4 | permalink: /pages/v2.7.X/202997/ 5 | --- 6 | 7 | 对于springboot的项目来说,LiteFLow提供了自动装配功能,在启动时会进行加载规则,扫描组件等初始化行为 8 | 9 | 如果你依赖了,但是不希望生效LiteFlow。则需要在配置文件中配置如下(这里以springboot的配置为例): 10 | 11 | ```properties 12 | liteflow.enable=false 13 | ``` 14 | 15 | 这个默认为true,所以希望LiteFlow生效的用户不用关心这个参数。 16 | 17 | :::tip 18 | 19 | 这里说明下,如果enable为false的话,spring上下文中不会去加载`FlowExecutor`,那你自己的类中如果@Autowire了这个,启动时仍会报错。 20 | 21 | enable为false,只是代表不初始化LiteFlow的一些元数据,但并不意味着你设为false了,你项目仍能正常启动。还需要做点变动的。 22 | 23 | ::: -------------------------------------------------------------------------------- /docs/20.v2.7.X文档/060.使用详细指南/090.前置后置组件.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 前置后置组件 3 | date: 2022-06-01 13:30:51 4 | permalink: /pages/v2.7.X/bedc2a/ 5 | --- 6 | 7 | LiteFlow从2.6.4开始,支持了前置组件和后置组件特性。 8 | 9 | 此特性针对整个链路,在链路之前之后固定执行某些组件。用于业务的前置处理和后置处理。 10 | 11 | 前置组件和后置组件,均为串行节点,目前不支持异步。 12 | 13 | ## 前置组件 14 | 15 | 固定在一个流程开始之前执行某些节点。表达方式为(这里仅以xml样式来举例,其他格式都差不多): 16 | 17 | ```xml 18 | 19 |
20 |     
21 |     
22 | 
23 | ```
24 | 
25 | ## 后置节点
26 | 
27 | 固定在一个流程结束后执行某些节点,要注意的是后置节点不受Exception影响,即便节点出错,后置节点依旧会执行。
28 | 
29 | 表达方式为(这里仅以xml样式来举例,其他格式都差不多):
30 | 
31 | ```xml
32 | 
33 |     
34 |     
35 | 
36 | ```
37 | 
38 | ## 顺序问题
39 | 
40 | 为了方便阅读,推荐大家`
`写在最前面,而``写在最后面。
41 | 
42 | 但是从逻辑上来说,LiteFlow会自动进行排序处理,无论你`
`和``写在哪里,总会优先执行`
`,最后执行``。


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/110.子流程.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 子流程
 3 | date: 2022-06-01 13:34:32
 4 | permalink: /pages/v2.7.X/5821d4/
 5 | ---
 6 | 
 7 | LiteFlow从`2.3.0`开始支持显式子流程,在xml里配置的节点,可以是节点,也可以是流程id。比如,你可以这么配置
 8 | 
 9 | ```xml
10 | 
11 |     
12 | 
13 | 
14 |     
15 | 
16 | 
17 |     
18 | 
19 | ```
20 | 
21 | 这样是不是很清晰
22 | 
23 | LiteFlow支持无穷的嵌套结构,只要你想的出。可以完成相对复杂的流程。
24 | 
25 | :::tip
26 | 如果存在相同名字的节点和流程,优先节点。
27 | :::


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/170.步骤信息.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 步骤信息
 3 | date: 2022-06-08 23:58:18
 4 | permalink: /pages/v2.7.X/a5728b/
 5 | ---
 6 | 
 7 | LiteFlow为执行的过程提供了详细的步骤信息。
 8 | 
 9 | 获取一条流程执行的步骤信息是通过`response`对象来获取的:
10 | 
11 | ```java
12 | LiteflowResponse response = flowExecutor.execute("chain1", "初始参数", CustomContext.class);
13 | Map stepMap = response.getExecuteSteps();
14 | ```
15 | 
16 | 获取到的是一个KV的数据结构,key就是你的组件ID,value则是一个`CmpStep`对象。
17 | 
18 | 在这个对象里,你可以通过以下方法获得你要的数据:
19 | 
20 | * `isSuccess`:此组件是否执行成功
21 | * `getNodeId`:获得组件Id
22 | * `getNodeName`:获得组件名称
23 | * `getTimeSpent`:获得组件的耗时,单位为毫秒
24 | * `getException`:获取此组件抛出的异常,如果isSuccess为false的话。但是这里要注意下:有exception,success一定为false,但是success为false,不一定有exception,因为有可能没执行到,或者没执行结束(any的情况)。
25 | 
26 | :::tip
27 | 如果你的某一个组件抛出了异常,在默认配置情况下,流程会中断。那么`response.getCause()`和相应组件步骤里的exception都是一致的。且没执行的组件不会有相应步骤信息。
28 | :::


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/190.不同格式规则加载.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 不同格式规则加载
 3 | date: 2022-06-01 13:56:19
 4 | permalink: /pages/v2.7.X/decf9a/
 5 | ---
 6 | 
 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如:
 8 | 
 9 | ```properties
10 | liteflow.rule-source=multipleType/flow.xml,multipleType/flow.json
11 | ```
12 | 
13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性:
14 | 
15 | ```properties
16 | liteflow.support-multiple-type=true
17 | ```


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/060.使用详细指南/220.简单监控.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 简单监控
 3 | date: 2022-06-01 14:00:20
 4 | permalink: /pages/v2.7.X/9ec64b/
 5 | ---
 6 | 
 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时
 8 | 
 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。
10 | 
11 | 关于监控配置默认的参数如下:
12 | 
13 | ```properties
14 | #是否启用监控
15 | liteflow.monitor.enable-log=false
16 | #监控队列的大小
17 | liteflow.monitor.queue-limit=200
18 | #监控延迟多少毫秒打印
19 | liteflow.monitor.delay=300000
20 | #监控每隔多少毫秒打印
21 | liteflow.monitor.period=300000
22 | ```


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/070.示例工程/010.测试用例.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 测试用例
 3 | date: 2022-06-01 14:02:31
 4 | permalink: /pages/v2.7.X/beadb0/
 5 | ---
 6 | 
 7 | 项目提供了丰富的测试用例,截止到2.7.1版本,项目内一共有接近400多个测试用例。几乎涵盖了文档内所有提到的功能点和场景。
 8 | 
 9 | **强烈建议想了解LiteFlow的同学可以去看看测试用例来学会如何在细节点上的配置和使用。**
10 | 
11 | 
12 | * liteflow-testcase-nospring: 非spring体系的测试用例
13 | * liteflow-testcase-springboot: springboot环境下的测试用例
14 | * liteflow-testcase-springnative: spring原生环境下的测试用例
15 | * liteflow-testcase-declare-component: 声明式组件场景下的测试用例
16 | * liteflow-testcase-script-qlexpress: 基于QLExpress脚本框架的测试用例
17 | * liteflow-testcase-script-groovy: 基于Groovy脚本框架的测试用例


--------------------------------------------------------------------------------
/docs/20.v2.7.X文档/070.示例工程/020.DEMO案例.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: DEMO案例
 3 | date: 2022-06-01 14:04:06
 4 | permalink: /pages/v2.7.X/73272c/
 5 | ---
 6 | 
 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看:
 8 | 
 9 | > [完整的带简单业务的案例](https://gitee.com/bryan31/liteflow-example)
10 | 
11 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算,建议大家去pull下来,仔细阅读下,这个业务用到了LiteFlow的大部分特性
12 | 
13 | 这个示例工程提供了一个简单的界面,供大家测试之用
14 | 
15 | ![example-web](/img/example-web.png)


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/010.Springboot场景安装运行/010.依赖.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 依赖
 3 | date: 2022-05-31 23:43:33
 4 | permalink: /pages/v2.6.X/2d57d5/
 5 | ---
 6 | 
 7 | LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能
 8 | 
 9 | ```xml
10 | 
11 |   com.yomahub
12 |   liteflow-spring-boot-starter
13 |   2.6.14
14 | 
15 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/010.Springboot场景安装运行/030.执行.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 执行
 3 | date: 2022-05-31 23:44:10
 4 | permalink: /pages/v2.6.X/73a9e7/
 5 | ---
 6 | 
 7 | 然后你就可以在任意的类中拿到flowExecutor,进行执行链路
 8 | 
 9 | ```java
10 | @Component
11 | public class MainTest{
12 |     
13 |     @Resource
14 |     private FlowExecutor flowExecutor;
15 |     
16 |     @Test
17 |     public void testConfig(){
18 |         LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
19 |     }
20 | }
21 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/020.Spring场景安装运行/010.依赖.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 依赖
 3 | date: 2022-06-01 00:11:44
 4 | permalink: /pages/v2.6.X/165d6f/
 5 | ---
 6 | 
 7 | 针对于使用了Spring但没有使用SpringBoot的项目
 8 | 
 9 | ```xml
10 | 
11 | 	com.yomahub
12 |     liteflow-spring
13 | 	2.6.14
14 | 
15 | ```
16 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/020.Spring场景安装运行/030.执行.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 执行
 3 | date: 2022-06-01 00:12:08
 4 | permalink: /pages/v2.6.X/47ef69/
 5 | ---
 6 | 
 7 | 和SpringBoot的执行方式一样,没有任何区别
 8 | 
 9 | ```java
10 | @Component
11 | public class MainTest{
12 |     
13 |     @Resource
14 |     private FlowExecutor flowExecutor;
15 |     
16 |     @Test
17 |     public void testConfig(){
18 |         LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
19 |     }
20 | }
21 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/010.说明.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 说明
 3 | date: 2022-06-01 00:14:28
 4 | permalink: /pages/v2.6.X/d53ad2/
 5 | ---
 6 | 
 7 | LiteFlow在`2.6.11`版本中对模块进行了彻底的拆分,重新开始支持了非spring的场景。
 8 | 
 9 | 虽说Springboot/Spring已经成为了Java项目中的标配,但是为了照顾到启用其他框架的小伙伴(其更重要的原因是强耦合Spring我始终觉得是瑕疵,有点代码洁癖),现在在非Spring体系的环境中也能使用LiteFlow框架带来的便捷和高效。
10 | 
11 | 
12 | 
13 | LiteFlow文档中提到的98%以上的特性功能都能在非Spring体系中生效。其中不生效的特性和功能有:
14 | 
15 | - ruleSource的模糊路径匹配特性在非Spring体系下不生效
16 | - LiteflowComponent在非Spring体系下无法使用
17 | - 监控功能在非Spring体系中无法使用


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/020.依赖.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 依赖
 3 | date: 2022-06-01 00:14:55
 4 | permalink: /pages/v2.6.X/9191fb/
 5 | ---
 6 | 
 7 | ```xml
 8 | 
 9 | 	com.yomahub
10 |     liteflow-core
11 | 	2.6.14
12 | 
13 | ```
14 | 为稳定版本,目前jar包已上传中央仓库,可以直接依赖到


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/030.安装和集成/030.其他场景安装运行/040.执行.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 执行
 3 | date: 2022-06-01 00:15:45
 4 | permalink: /pages/v2.6.X/81d136/
 5 | ---
 6 | 
 7 | ## 初始化你的FlowExecutor执行器
 8 | 
 9 | 通过以下代码你可以轻易的初始化`FlowExecutor`处理器:
10 | 
11 | ```java
12 | LiteflowConfig config = new LiteflowConfig();
13 | config.setRuleSource("base/flow.xml");
14 | FlowExecutor flowExecutor = FlowExecutorHolder.loadInstance(config);
15 | ```
16 | 
17 | LiteFlow有很多其他的配置,但非必须,想知道有哪些可以参考Springboot和Spring那两章节的配置一章,有详细的说明。
18 | 
19 | :::tip
20 | 
21 | 要注意的是,不建议每次执行流程都去初始化`FlowExecutor`,这个对象的初始化工作相对比较重,全局只需要初始化一次就好了。建议在项目启动时初始化或者第一次执行的时候初始化。
22 | 
23 | :::
24 | 
25 | ## 用FlowExecutor执行
26 | 
27 | ```java
28 | LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
29 | ```
30 | 


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/040.规则文件/020.本地规则文件配置.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 本地规则文件配置
 3 | date: 2022-06-01 11:34:52
 4 | permalink: /pages/v2.6.X/23d0c3/
 5 | ---
 6 | 
 7 | 在LiteFlow框架中,规则文件是驱动/编排整个流程的关键,用户通过指定rule-source来定位规则文件的本地路径。而rule-source也是LiteFlow框架中必须配置的参数,而其他参数都不是必须的(都有默认值)。
 8 | 
 9 | 以下以Springboot的配置做例子,Spring以及非Spring的环境配置可以详细阅读`安装和集成`这章节。
10 | 
11 | 
12 | 
13 | ## 常规配置
14 | 
15 | ```properties
16 | liteflow.rule-source=config/flow.xml
17 | ```
18 | 
19 | 
20 | 
21 | 
22 | ## 指定多个路径
23 | 
24 | 规则文件之间可以用`,`或者`;`隔开:
25 | 
26 | ```properties
27 | liteflow.rule-source=config/flow1.xml,config/flow2.xml,config/flow3.xml
28 | ```
29 | 
30 | 你也可以使用Spring EL表达式进行模糊匹配,加载多个配置文件:
31 | 
32 | ```properties
33 | liteflow.rule-source=config/**/*.xml
34 | ```
35 | 
36 | :::tip
37 | 
38 | 模糊匹配只限于Springboot/Spring体系中,非Spring环境,模糊匹配不生效
39 | 
40 | :::


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/050.用代码动态构造规则/010.说明.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 说明
 3 | date: 2022-06-01 11:54:31
 4 | permalink: /pages/v2.6.X/b2143d/
 5 | ---
 6 | 
 7 | LiteFlow从`2.6.8`版本开始支持基于方法链的代码构造链路的特性。
 8 | 
 9 | ::: tip
10 | 
11 | 通过代码构造模式,你可以不用写xml/json/yaml的规则文件。用代码来构建规则。
12 | 
13 | 事实上,LiteFlow的规则无论是什么格式的,最终底层也是由构造链去构造的。
14 | 
15 | :::
16 | 
17 | ::: tip 意义
18 | 
19 | 提供动态代码构造的API意义在于以下两点:
20 | 
21 | * 有些规则并不是在项目启动时就确定的。你可以通过构造模式,以代码形式的方式去动态构造一条链路,也可以去替换一条链路。
22 | * 如果你想把规则的细节点存数据库(而不是存整段规则文件),那么动态代码构造是个不错的选择。只不过,你需要在应用启动时自己写逻辑去读库,然后用动态代码构造API去构造链路。
23 | 
24 | :::
25 | 
26 | LiteFlow在`2.6.8`中设计了非常简单的构造方法链式API,让你可以很轻松的构造一条链路。
27 | 
28 | 并且,这一切同规则文件一样,都是支持平滑热刷新的,你完全不必担心在高并发时更换流程会造成链路错乱的问题。关于平滑热刷新,可以参考[平滑热刷新](/pages/v2.6.X/d0e86d/)。


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/010.开启和关闭.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 开启和关闭
 3 | date: 2022-06-01 13:03:03
 4 | permalink: /pages/v2.6.X/1f47ae/
 5 | ---
 6 | 
 7 | 对于springboot的项目来说,LiteFLow提供了自动装配功能,在启动时会进行加载规则,扫描组件等初始化行为
 8 | 
 9 | 如果你依赖了,但是不希望生效LiteFlow。则需要在配置文件中配置如下(这里以springboot的配置为例):
10 | 
11 | ```properties
12 | liteflow.enable=false
13 | ```
14 | 
15 | 这个默认为true,所以希望LiteFlow生效的用户不用关心这个参数。
16 | 
17 | :::tip
18 | 
19 | 这里说明下,如果enable为false的话,spring上下文中不会去加载`FlowExecutor`,那你自己的类中如果@Autowire了这个,启动时仍会报错。
20 | 
21 | enable为false,只是代表不初始化LiteFlow的一些元数据,但并不意味着你设为false了,你项目仍能正常启动。还需要做点变动的。
22 | 
23 | :::


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/110.子流程.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 子流程
 3 | date: 2022-06-01 13:34:12
 4 | permalink: /pages/v2.6.X/2be4e2/
 5 | ---
 6 | 
 7 | LiteFlow从`2.3.0`开始支持显式子流程,在xml里配置的节点,可以是节点,也可以是流程id。比如,你可以这么配置
 8 | 
 9 | ```xml
10 | 
11 |     
12 | 
13 | 
14 |     
15 | 
16 | 
17 |     
18 | 
19 | ```
20 | 
21 | 这样是不是很清晰
22 | 
23 | LiteFlow支持无穷的嵌套结构,只要你想的出。可以完成相对复杂的流程。
24 | 
25 | :::tip
26 | 如果存在相同名字的节点和流程,优先节点。
27 | :::


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/120.隐式子流程.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 隐式子流程
 3 | date: 2022-06-01 13:35:04
 4 | permalink: /pages/v2.6.X/2777ec/
 5 | ---
 6 | 
 7 | LiteFlow支持在一个节点里通过代码调用另外一条流程, 这个流程关系在规则文件中并不会显示。所以这里称之为隐式调用。
 8 | 
 9 | 主流程和隐式子流程共同享有同一个SLOT的数据。所以隐式子流程里也完全可以拿到这个请求中的所有数据。
10 | 
11 | 隐式调用可以完成更为复杂的子流程,比如循环调用:
12 | 
13 | ```java
14 | @Component("h")
15 | public class HComponent extends NodeComponent {
16 | 
17 | 	@Resource
18 | 	private FlowExecutor flowExecutor;
19 | 	
20 | 	@Override
21 | 	public void process() {
22 | 		System.out.println("Hcomponent executed!");
23 |         for(int i=0;i<10;i++){
24 |             flowExecutor.invoke("strategy1",3, DefaultSlot.class, this.getSlotIndex());
25 |         }
26 | 	}
27 | }
28 | ```
29 | 
30 | 这段代码演示了在某个业务节点内调用另外一个流程链的方法


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/170.异常处理机制.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 异常处理机制
 3 | date: 2022-06-01 13:50:03
 4 | permalink: /pages/v2.6.X/d61011/
 5 | ---
 6 | 
 7 | LiteFlow中执行器FlowExecutor支持两种方式来执行一个流程,
 8 | 1. execute方法,返回Slot实现类对象,直接抛出异常信息,业务系统自行处理异常;
 9 | ```java
10 | public  T execute(String chainId, Object param, Class slotClazz,
11 |                                      Integer slotIndex, boolean isInnerChain) throws Exception
12 | ```
13 | 2. execute2Resp方法,返回LiteflowResponse类对象,异常信息包装在LiteflowResponse类中。
14 | ```java
15 |  public  LiteflowResponse execute2Resp(String chainId, Object param, Class slotClazz, Integer slotIndex,
16 |                                         boolean isInnerChain)
17 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/190.不同格式规则加载.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 不同格式规则加载
 3 | date: 2022-06-01 13:56:16
 4 | permalink: /pages/v2.6.X/f67d92/
 5 | ---
 6 | 
 7 | 有些小伙伴在配置规则时,因为特殊原因,需要同时加载2种不同的配置,甚至是配置源,比如:
 8 | 
 9 | ```properties
10 | liteflow.rule-source=multipleType/flow.xml,multipleType/flow.json
11 | ```
12 | 
13 | 这种模式在正常下会解析失败,但是LiteFLow提供了一个参数去支持这个特性,如果出现不同的类型的配置,需要加上这个属性:
14 | 
15 | ```properties
16 | liteflow.support-multiple-type=true
17 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/060.使用详细指南/220.简单监控.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 简单监控
 3 | date: 2022-06-01 13:59:52
 4 | permalink: /pages/v2.6.X/4b18be/
 5 | ---
 6 | 
 7 | LiteFlow提供了简单的监控,目前只统计一个指标:每个组件的平均耗时
 8 | 
 9 | 默认每5分钟会打印一次(可以自己调整),并且是根据耗时时长倒序排的。
10 | 
11 | 关于监控配置默认的参数如下:
12 | 
13 | ```properties
14 | #是否启用监控
15 | liteflow.monitor.enable-log=false
16 | #监控队列的大小
17 | liteflow.monitor.queue-limit=200
18 | #监控延迟多少毫秒打印
19 | liteflow.monitor.delay=300000
20 | #监控每隔多少毫秒打印
21 | liteflow.monitor.period=300000
22 | ```


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/070.示例工程/010.测试用例.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: 测试用例
 3 | date: 2022-06-01 14:01:20
 4 | permalink: /pages/v2.6.X/45096f/
 5 | ---
 6 | 
 7 | 项目提供了丰富的测试用例,截止到2.6.14版本,项目内一共有接近400个测试用例。几乎涵盖了文档内所有提到的功能点和场景。
 8 | 
 9 | **强烈建议想了解LiteFlow的同学可以去看看测试用例来学会如何在细节点上的配置和使用。**
10 | 
11 | 
12 | * liteflow-testcase-nospring: 非spring体系的测试用例
13 | * liteflow-testcase-springboot: springboot环境下的测试用例
14 | * liteflow-testcase-springnative: spring原生环境下的测试用例
15 | * liteflow-testcase-declare-component: 声明式组件场景下的测试用例
16 | * liteflow-testcase-script-qlexpress: 基于QLExpress脚本框架的测试用例
17 | * liteflow-testcase-script-groovy: 基于Groovy脚本框架的测试用例


--------------------------------------------------------------------------------
/docs/30.v2.6.X文档/070.示例工程/020.DEMO案例.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: DEMO案例
 3 | date: 2022-06-01 14:03:11
 4 | permalink: /pages/v2.6.X/3ae932/
 5 | ---
 6 | 
 7 | 如果你想看一个实际的案例,加深对LiteFlow的理解。可以查看:
 8 | 
 9 | > [完整的带简单业务的案例](https://gitee.com/bryan31/liteflow-example)
10 | 
11 | 这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算,建议大家去pull下来,仔细阅读下,这个业务用到了LiteFlow的大部分特性
12 | 
13 | 这个示例工程提供了一个简单的界面,供大家测试之用
14 | 
15 | ![example-web](/img/example-web.png)


--------------------------------------------------------------------------------
/docs/@pages/archivesPage.md:
--------------------------------------------------------------------------------
1 | ---
2 | archivesPage: true
3 | title: 归档
4 | permalink: /archives/
5 | article: false
6 | ---


--------------------------------------------------------------------------------
/docs/PPT.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: PPT获取
 3 | date: 2022-07-18 00:54:47
 4 | permalink: /pages/8d6666/
 5 | ---
 6 | 
 7 | ## 获取方法
 8 | 
 9 | 做PPT的初衷是考虑到社区内的小伙伴都想在公司内部进行培训分享,但是要从文档中总结出一个PPT,需要一定的时间。作者亲自给你们做了PPT。
10 | 
11 | 不过要注意的是,PPT注重让大家了解LiteFlow的特性和简单使用,不会深入到实现层面去分析。并且所有的页数都是精心设计。建议40分钟内讲完。整体也不会把每一部分都讲细,需要演讲者自己去补充一些旁白和理解,并结合一些demo案例进行演示,demo案例和测试用例在文档中有提到。
12 | 
13 | 分享者可以自己新增一些内容,但是为了版权,请尽量保留作者的署名。
14 | 
15 | **领取方法:关注公众号,在公众号内回复`ppt`获取!**
16 | 
17 | ![img](/img/offical-wx.jpg)
18 | 
19 | ## PPT部分页数动图预览
20 | 
21 | PPT中含有大量的动态效果,**推荐用播放按钮观看或者进行演讲,效果最佳。**
22 | 
23 | ![](/img/ppt/ppt1.gif)
24 | 
25 | ![](/img/ppt/ppt2.gif)
26 | 
27 | ![](/img/ppt/ppt3.gif)


--------------------------------------------------------------------------------
/docs/专题解释/02.Slot是一个什么样的概念,在框架中起到什么样的作用?.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | title: Slot是一个什么样的概念,在框架中起到什么样的作用?
 3 | date: 2023-03-25 21:58:48
 4 | permalink: /pages/ad60b4/
 5 | ---
 6 | 
 7 | 有使用者肯定发现了,在组件中通过this关键字,可以调用到`this.getSlot()` 这个方法,返回一个slot。
 8 | 
 9 | 那这个Slot是什么呢?在框架中起到什么样的作用?
10 | 
11 | 
12 | 13 | Slot对象是上下文的一个包装类。每一个请求,都会申请一个新的Slot对象,同时一个请求结束的时候,也会回收这个slot对象。 14 | 15 | LiteFlow框架声称的对于每个请求,上下文之间是隔离的,准确的来说,是Slot之间是隔离的。因为Slot隔离,所以上下文也隔离。上下文是Slot中的一个子项。 16 | 17 |
18 | 19 | 上下文是用来存放组件中产生的业务数据的,而它的包装类Slot里,则存放着一些框架对于这次请求中的元数据。大多数情况下,用户是不需要关心的。 20 | 21 |
22 | 23 | 大部分情况下,用户只要直接获得上下文就可以了。 24 | 25 |
26 | 27 | 值得一提的是,slot的数量可能有些使用者会以为只有1024个,从而认为并发如果超过1024,slot就会分配不过来了。其实不然,LiteFlow框架从很早开始就加入了slot自动扩容的机制,当slot用完的时候,slot就会自动扩容。扩容因子为0.75,也就是说,每次扩容之后的数量为扩容之前的1.75倍。其实使用者是完全不用担心并发大,slot分配不过来的问题。 28 | -------------------------------------------------------------------------------- /docs/付费社区.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: LF CLUB社区 3 | date: 2024-01-15 00:54:47 4 | permalink: /pages/8d8888/ 5 | --- 6 | 7 | LF CLUB是由LiteFlow作者创办的高级付费社区 8 | 9 | LF CLUB能帮助到所有LiteFlow框架的使用者,以及想使用LiteFlow的潜在开发者。 10 | 11 | LF CLUB提供以下服务: 12 | 13 | **1.每周发布一篇LF的解析精华系列。从头开始解析LF,只要跟着星球解析系列走,使用者一定能完全掌握LF。** 14 | 15 | **2.提供答疑服务,会员可以无限制提问,当天必定得到详细的回复和指导建议。** 16 | 17 | **3.每个加入的用户每年提供2次远程一对一答疑,远程协助服务。** 18 | 19 | **4.每1到2天会分享LF目前的进度,以及下一个版本的重点。** 20 | 21 | LF CLUB里能解决你在使用LiteFlow框架时碰到的所有问题,并有系列课程能帮助你深刻理解LiteFlow框架,不同于微信社区,LF CLUB的问题优先级程度是最高的,且答疑非常详细。 22 | 23 | 独家内容帮助深刻理解,不用在其他平台去搜索问题的答案。作者亲授,相当于随时拥有专家在身边,不用再去求助其他人。 24 | 25 | 加入LF CLUB,请扫描以下二维码,或者直接点击图片也可以直达: 26 | 27 | -------------------------------------------------------------------------------- /docs/加入社区讨论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 加入社区讨论 3 | date: 2022-06-01 14:45:45 4 | permalink: /pages/73c2c3/ 5 | --- 6 | 7 | LiteFlow是轻量,快速,稳定,可编排的组件式流程引擎,自从开源以来,我们收到了很多人的使用反馈,听取这些反馈进行迭代和新特性开发。 8 | 9 | 如果你在使用中有问题,或者想咨询了解,可以加入群聊,我会细心答复每一个人的疑问。 10 | 11 | 由于社区群十分庞大,需要邀请入群,**你可以关注我的微信公众号,点击`个人微信`,加好友时备注`liteflow`,我会拉你入群。** 12 | 13 | ![img](/img/offical-wx.jpg) 14 | 15 | 近期新增分群,可以自由扫码加入: 16 | 17 | 18 | 19 | 同时也有QQ群,习惯QQ群的同学可以加群提问和反馈(主要以微信群为主,QQ群回复可能会稍慢) 20 | 21 | QQ群:720789088 -------------------------------------------------------------------------------- /docs/升级到2.7.X说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 升级到2.7.X说明 3 | date: 2022-06-28 23:37:14 4 | permalink: /pages/4848b9/ 5 | --- 6 | 7 | 2.7.X较2.6.X最大的不同点有2个: 8 | 9 | 1.核心包的包路径有些许变化。但是类名都没变。 10 | 11 | 2.对用户屏蔽了Slot,转而变成了上下文的概念。以前需要你自己自定义slot,现在则是变成了自定义上下文类。你可以把任意的Bean当做上下文传入。 12 | 13 | 如果你想从2.6.X升级到2.7.X,你需要做以下事情: 14 | 15 | * 如果有些类import报红找不到,可以重新import。因为包路径发生了些许改变。 16 | * 以前你的Slot是extend AbsSlot的。现在你需要去掉继承AbsSlot(这个抽象类已经不存在),然后最好重命名你的类变成`XxxxContext`形式。 17 | * 在组件里,以前你需要先取到Slot对象,然后才能获取数据。现在你需要改成取到上下文对象,`this.getContextBean()`这个方法就可以方便的取到上下文。 18 | * 因为Slot概念在2.7.X中对用户隐藏,但是它依旧存在,以前你获取初始参数是在组件内部通过slot.getRequestData()现在最好改成`this.getRequestData()`方法。 19 | 20 | :::tip 21 | 其实很多方法,你依旧可以通过获取Slot对象再去调用获取。但是新版本里已经不推荐了。很多方法现在都可以在组件里通过this关键字去获取了。 22 | ::: -------------------------------------------------------------------------------- /docs/升级到2.9.3说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 升级到2.9.X说明 3 | date: 2022-10-07 12:43:18 4 | permalink: /pages/88c2f4/ 5 | --- 6 | 7 | 此文档仅适用于从2.9.0/2.9.1/2.9.2升级到2.9.3的指南。如果你处于以前的版本,请看其他升级文档。 8 | 9 | 10 | ## 2.9.X升级到2.9.3的注意事项 11 | 12 | 核心用法上,完全兼容。 13 | 14 | 由于2.9.3升级加强了第三方中间件的存储结构。 15 | 16 | 如果你有用到zk,etcd,数据库来进行存储规则和脚本。那你无法平滑的升级到2.9.3,需要按照以下文档修改你中间件里的结构: 17 | 18 | [SQL数据库配置源](/pages/236b4f/) 19 | 20 | [ZK规则文件配置源](/pages/ffc345/) 21 | 22 | [Etcd配置源](/pages/4bfac2/) -------------------------------------------------------------------------------- /utils/config.yml: -------------------------------------------------------------------------------- 1 | #批量添加和修改、删除front matter配置文件 2 | 3 | # 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... ) 4 | path: 5 | - docs # 第一个成员必须是docs 6 | 7 | # 要删除的字段 (数组) 8 | delete: 9 | # - test 10 | # - tags 11 | 12 | # 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖) 13 | data: 14 | article: false -------------------------------------------------------------------------------- /utils/modules/fn.js: -------------------------------------------------------------------------------- 1 | // 类型判断 2 | exports.type = function (o){ 3 | var s = Object.prototype.toString.call(o) 4 | return s.match(/\[object (.*?)\]/)[1].toLowerCase() 5 | } 6 | 7 | // 修复date时区格式的问题 8 | exports.repairDate = function (date) { 9 | date = new Date(date); 10 | return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; 11 | } 12 | 13 | // 日期的格式 14 | exports.dateFormat = function (date) { 15 | return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` 16 | } 17 | 18 | // 小于10补0 19 | function zero(d){ 20 | return d.toString().padStart(2,'0') 21 | } --------------------------------------------------------------------------------