(二)SpringBoot集成LiteFlow

1. SpringBoot集成LiteFlow

1.1 环境支持

JDK支持度

LiteFlow要求的最低的JDK版本为8,支持JDK8~JDK17所有的版本。

如果你使用JDK11以上,确保LiteFlow的版本为v2.10.6及其以上版本。

因为LiteFlow从v2.10.6开始,对JDK11和JDK17进行了详细的用例测试,通过了全部的900多个测试用例。而在v2.10.6以下版本,在JDK11以上是未经过测试用例保障的。

特别需要注意的是,如果你使用JDK11及其以上的版本,请确保jvm参数加上以下参数

--add-opens java.base/sun.reflect.annotation=ALL-UNNAMED

Springboot支持度

LiteFlow要求的Springboot的最低的版本是2.0。

支持的范围是Springboot 2.X ~ Springboot 3.X。

当然如果你使用了最新的Springboot 3.X,相应的JDK版本也要切换为JDK17。

1.2 pom依赖配置

<dependency>
    <groupId>com.yomahubgroupId>
    <artifactId>liteflow-spring-boot-starterartifactId>
    <version>2.11.4.2version>
dependency>

1.3 组件定义

@Component("a")
public class ACmp extends NodeComponent {
	@Override
	public void process() {
		//do your business
	}
}
@Component("b")
public class BCmp extends NodeComponent {
	@Override
	public void process() {
		//do your business
	}
}

1.4 application.properties配置

liteflow.rule-source=config/flow.el.xml

1.5 规则文件定义

在resources下的config/flow.el.xml中定义规则:


<flow>
    <chain name="chain1">
        THEN(a, b);
    chain>
flow>

SpringBoot在启动时会自动装载规则文件。

2. 参数配置说明

#规则文件路径
liteflow.rule-source=config/flow.el.xml
#-----------------以下非必须-----------------
#liteflow是否开启,默认为true
liteflow.enable=true
#liteflow的banner是否开启,默认为true
liteflow.print-banner=true
#zkNode的节点,只有使用zk作为配置源的时候才起作用
liteflow.zk-node=/lite-flow/flow
#上下文的最大数量槽,默认值为1024
liteflow.slot-size=1024
#FlowExecutor的execute2Future的线程数,默认为64
liteflow.main-executor-works=64
#FlowExecutor的execute2Future的自定义线程池Builder,LiteFlow提供了默认的Builder
liteflow.main-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder
#自定义请求ID的生成类,LiteFlow提供了默认的生成类
liteflow.request-id-generator-class=com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator
#并行节点的线程池Builder,LiteFlow提供了默认的Builder
liteflow.thread-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultWhenExecutorBuilder
#异步线程最长的等待时间(只用于when),默认值为15000
liteflow.when-max-wait-time=15000
#异步线程最长的等待时间单位(只用于when),默认值为MILLISECONDS,毫秒
liteflow.when-max-wait-time-unit=MILLISECONDS
#when节点全局异步线程池最大线程数,默认为16
liteflow.when-max-workers=16
#when节点全局异步线程池等待队列数,默认为512
liteflow.when-queue-limit=512
#并行循环子项线程池最大线程数,默认为16
liteflow.parallelLoop-max-workers=16
#并行循环子项线程池等待队列数,默认为512
liteflow.parallelLoop-queue-limit=512
#并行循环子项的线程池Builder,LiteFlow提供了默认的Builder
liteflow.parallelLoop-executor-class=com.yomahub.liteflow.test.customThreadPool.CustomThreadBuilder
#是否在启动的时候就解析规则,默认为true
liteflow.parse-on-start=true
#全局重试次数,默认为0
liteflow.retry-count=0
#是否支持不同类型的加载方式混用,默认为false
liteflow.support-multiple-type=false
#全局默认节点执行器
liteflow.node-executor-class=com.yomahub.liteflow.flow.executor.DefaultNodeExecutor
#是否打印执行中过程中的日志,默认为true
liteflow.print-execution-log=true
#是否开启本地文件监听,默认为false
liteflow.enable-monitor-file=false
#是否开启快速解析模式,默认为false
liteflow.fast-load=false
#监控是否开启,默认不开启
liteflow.monitor.enable-log=false
#监控队列存储大小,默认值为200
liteflow.monitor.queue-limit=200
#监控一开始延迟多少执行,默认值为300000毫秒,也就是5分钟
liteflow.monitor.delay=300000
#监控日志打印每过多少时间执行一次,默认值为300000毫秒,也就是5分钟
liteflow.monitor.period=300000

3. 规则文件

3.1 规则文件格式

LiteFlow支持3种配置方式

  • xml
    在xml形式下的rule-source的配置方式如下:
    本地文件:liteflow.rule-source=config/flow.el.xml
    自定义配置源:liteflow.rule-source=el_xml:com.yomahub.liteflow.test.TestCustomParser

<flow>
    <nodes>
        <node id="a" class="com.yomahub.liteflow.test.parser.cmp.ACmp"/>
        <node id="b" class="com.yomahub.liteflow.test.parser.cmp.BCmp"/>
        <node id="c" class="com.yomahub.liteflow.test.parser.cmp.CCmp"/>
        <node id="d" class="com.yomahub.liteflow.test.parser.cmp.DCmp"/>
    nodes>

    <chain name="chain1">
        THEN(
            a, b, WHEN(c,d)
        );
    chain>
flow>
  • json
    在json形式下的rule-source的配置方式如下:
    本地文件:liteflow.rule-source=config/flow.el.json
    自定义配置源:liteflow.rule-source=el_json:com.yomahub.liteflow.test.TestCustomParser
{
  "flow": {
    "nodes": {
      "node": [
        {
          "id": "a",
          "class": "com.yomahub.liteflow.test.parser.cmp.ACmp"
        },
        {
          "id": "b",
          "class": "com.yomahub.liteflow.test.parser.cmp.BCmp"
        },
        {
          "id": "c",
          "class": "com.yomahub.liteflow.test.parser.cmp.CCmp"
        },
        {
          "id": "d",
          "class": "com.yomahub.liteflow.test.parser.cmp.DCmp"
        }
      ]
    },
    "chain": [
      {
        "name": "chain1",
        "value": "THEN(a, b, WHEN(c, d))"
      }
    ]
  }
}
  • yml
    在yaml形式下的rule-source的配置方式如下:
    本地文件:liteflow.rule-source=config/flow.el.yml
    自定义配置源:liteflow.rule-source=el_yml:com.yomahub.liteflow.test.TestCustomParser
flow:
  nodes:
    node:
      - id: a
        class: com.yomahub.liteflow.test.parser.cmp.ACmp
      - id: b
        class: com.yomahub.liteflow.test.parser.cmp.BCmp
      - id: c
        class: com.yomahub.liteflow.test.parser.cmp.CCmp
      - id: d
        class: com.yomahub.liteflow.test.parser.cmp.DCmp
  chain:
    - name: chain1
      value: "THEN(a, b, WHEN(c, d))"

3.2 本地规则文件配置

常规配置

liteflow.rule-source=config/flow.el.xml

工程内指定多个路径

规则文件之间可以用,或者;隔开:

liteflow.rule-source=config/flow1.el.xml,config/flow2.el.xml,config/flow3.el.xml

你也可以使用Spring EL表达式进行模糊匹配,加载多个配置文件:

liteflow.rule-source=config/**/*.el.xml

3.3 SQL数据库配置源

依赖

<dependency>
    <groupId>com.yomahubgroupId>
    <artifactId>liteflow-rule-sqlartifactId>
    <version>2.11.4.2version>
dependency>

yml配置

liteflow:
  rule-source-ext-data-map:
    url: jdbc:mysql://localhost:3306/poseidon
    driverClassName: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    applicationName: demo
    #是否开启SQL日志
    sqlLogEnabled: true
    #是否开启SQL数据轮询自动刷新机制 默认不开启
    pollingEnabled: true
    pollingIntervalSeconds: 60
    pollingStartSeconds: 60
    #以下是chain表的配置,这个一定得有
    chainTableName: chain
    chainApplicationNameField: application_name
    chainNameField: chain_name
    elDataField: el_data
    chainEnableField: enable
    #以下是script表的配置,如果你没使用到脚本,下面可以不配置
    scriptTableName: script
    scriptApplicationNameField: application_name
    scriptIdField: script_id
    scriptNameField: script_name
    scriptDataField: script_data
    scriptTypeField: script_type
    scriptLanguageField: script_language
    scriptEnableField: enable

参考资料

https://liteflow.cc/pages/df6982/
https://liteflow.cc/pages/6fa87e/

你可能感兴趣的:(LiteFlow,tips,JAVA学习,spring,boot,java,liteflow)