Skip to content
广告❤️成为赞助商

任务触发器

任务触发器,它可以触发或启动一个特定的流程、操作或事件序列。

  • 立即触发

当执行到触发器节点,会立刻执行触发器实现类业务,结束执行进入下一个节点。

  • 定时触发

当执行到触发器节点,会在数据库 flw_task 中记录一条待执行记录,期望任务完成时间expireTime到达后由定时器触发执行,结束后进入下一个节点。

实例配置

触发器节点模型

json
{
    "nodeName": "延时触发器",
    "type": 7,
    "extendConfig": {
      "time": "7:d",
      "args": "执行 json 参数",
      "trigger": "test.mysql.TaskTriggerImpl"
    }
}

实现触发器接口

  • 触发器接口
java
public interface TaskTrigger {

    /**
     * 执行任务触发器节点
     *
     * @param nodeModel 节点模型
     * @param execution 执行对象
     */
    boolean execute(NodeModel nodeModel, Execution execution);
}
  • 测试触发器实现
java
public class TaskTriggerImpl implements TaskTrigger {

    @Override
    public boolean execute(NodeModel nodeModel, Execution execution) {
        System.out.println("执行了触发器 args = " + nodeModel.getExtendConfig().get("args"));
        return true;
    }
}

测试用例

测试用例源码位置 flowlong-spring-boot-starter/src/test/java/test/mysql/TestTrigger.java

java
public class TestTrigger extends MysqlTest {

    @BeforeEach
    public void before() {
        processId = this.deployByResource("test/testTrigger.json", testCreator);
    }

    @Test
    public void test() {
        flowLongEngine.startInstanceById(processId, testCreator).ifPresent(instance -> {

            // 忽略查询时间执行定时器任务
            this.executeActiveTasks(instance.getId(), flwTask ->

                    // 模拟自动完成定时触发器任务
                    flowLongEngine.autoCompleteTask(flwTask.getId()));

            this.executeActiveTasks(instance.getId(), flwTask ->

                    // 进入人事审批
                    Assertions.assertEquals("人事审批", flwTask.getTaskName()));
        });
    }
}

更适合中国人的工作流引擎