```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-flow</artifactId>
</dependency>
```

### 1、描述

基础扩展插件。为 Solon 提供通用的流程编排能力。

* 可用于计算（或任务）的编排场景
* 可用于业务规则和决策处理型的编排场景
* 可用于可中断、可恢复流程（结合自动前进，停止，再执行）的编排场景


### 2、概念定义

主要概念：

* 图、节点（可带任务）、连接（可带条件）
* 流上下文、流驱动器、任务组件接口（TaskComponent）
* 流程引擎


概念关系描述（就像用工具画图）：

* 一个图（Graph），由多个节点（Node）和连接（Link）组成。
* 一个节点（Node），会有多个连接（Link，也叫“流出连接”）连向别的节点。
    * 连接向其它节点，称为：流出连接。
    * 被其它节点连接，称为：流入连接。
* 一个图“必须有且只有”一个 start 类型的节点，且从 start 节点开始，顺着连接（Link）流出。
* 流引擎在执行图的过程，可以有上下文（FlowContext），可以被阻断分支或停止执行


通俗些，就是通过 “点”（节点） + “线”（连接）来描述一个流程图结构。


### 3、学习与教程

此插件也可用于非 solon 生态。具体开发学习，可参考：[《教程 / Solon Flow 开发》](/article/learn-solon-flow)



### 4、应用简单示例

配置参考

```yml
# demo1.yml（完整模式）
id: "c1"
layout: 
  - { id: "n1", type: "start", link: "n2"}
  - { id: "n2", type: "activity", link: "n3", task: "System.out.println(\"hello world!\");"}
  - { id: "n3", type: "end"}


# demo2.yml（简化模式）
id: "c2"
layout: 
  - { type: "start"}
  - { task: "System.out.println(\"hello world!\");"}
  - { type: "end"}
```

代码应用

```java
@Configuration
public class App {
    @Inject 
    FlowEngine flowEngine;

    @Bean
    public void test() throws Throwable {
        flowEngine.eval("c1");
    }
}
```

