任务触发器
任务触发器,它可以触发或启动一个特定的流程、操作或事件序列。
- 立即触发
当执行到触发器节点,会立刻执行触发器实现类业务,结束执行进入下一个节点。
- 定时触发
当执行到触发器节点,会在数据库
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()));
});
}
}