Activities:定时器事件

涉及核心表:ACT_RU_TIMER_JOB

开始定时器事件

  • 可以设置时间,定时开始启动流程实例。

  • 部署流程后,不用 startProcessInstanceByXxxx 启动流程实例,而是到达设定时间后自动启动。

  • 到达设定时间后,查询下是否有对应的流程实例。

  • 触发时间**(ISO-8601格式标准)**:

    表示何时触发,标签元素<timeDate> ,时间格式时ISO 8601的固定格式,如:

    <timerEventDefinition>
    <timeDate>2023-03-09T18:18:18</timeDate>
    </timerEventDefinition>

    2023-03-09T18:18:18 -> T是日期和时间分割标记.

  • 持续时间**(例如** PT5M)

    表示定时器经过多少时间后触发;标签元素 <timeDuration> ,时间格式为ISO 8601的PT格式,如:

    <timerEventDefinition>
    <timeDuration>PT10S</timeDuration>
    </timerEventDefinition>

    要设置 一年两个月三天四小时五分六秒 ,可以写成 P1Y2M3DT4H5M6S

    P 是开始标记,T 是日期和时间分割标记。没有日期只有时间T**是不能省去**,只有日期没有时间T直接省去比如:1小时后执行应该写成 PT1H ,10秒后执行 PT10S ,3天后执行 P3D 。

  • 时间周期 (e.g. R3/PT10H)

    表示重复触发的间隔时间;标签元素 <timeCycle> ,时间格式为ISO 8601的PT格式或Rn格式或变量,如:

    <timerEventDefinition>
    <timeCycle>R3/PT10H</timeCycle>
    </timerEventDefinition>
    • R 表示永远重复;R1 重复一次;R231重复231次

    • R3/PT10H 表示重复3次每次间隔10小时

根据上图部署流程定义,然后10秒后观察是否有相关的流程实例...

通过模型数据部署流程定义:https://www.cnblogs.com/wangshaoyun/p/17150560.html

边界定时器事件

用于向某节点上添加边界定时事件,流程图如下:

注意:报如下错误,检查边界定时器连线问题,删除定时器符号重新绘制。

根据上图流程图启动流程
@Autowired
RuntimeService runtimeService;
@Autowired
TaskService taskService;
​
@Test
public void start() throws Exception {
    //启动流程实例
    runtimeService.startProcessInstanceByKey("testTimer2");
​
    List<Task> tasks = taskService.createTaskQuery()
            .processDefinitionKey("testTimer2")
            .list();
​
    for (Task task : tasks) {
        System.out.println("当前的任务信息:");
        System.out.println("任务id:"+task.getId());
        System.out.println("任务名称:"+task.getName());
    }
​
    //等待20s
    Thread.sleep(20*1000);
    //查询任务办理情况
     tasks = taskService.createTaskQuery()
            .processDefinitionKey("testTimer2")
            .list();
​
    for (Task task : tasks) {
        System.out.println("20s后的任务信息:");
        System.out.println("任务id:"+task.getId());
        System.out.println("任务名称:"+task.getName());
    }
}