# 定时器
定时器事件(Timer Events)是由预定义的计时器触发的事件。其有效运作依赖于引擎的 Job Executor 组件,该组件需要被正确配置和启用,以便在后台轮询并执行到期的定时任务
定时器的定义遵循 ISO 8601 标准,主要通过以下三种方式设定:
固定时间点(Time Date):在某个绝对的日期和时间触发一次。例如 2011-03-11T12:13:14Z。
持续时间(Time Duration):在流程执行到达定时器节点后,经过一段指定的延迟时间后触发。例如 PT10M表示10分钟后触发。
循环周期(Time Cycle):按照设定的周期循环触发。这可以使用ISO8601循环格式(如 R3/PT10H表示重复3次,每次间隔10小时)
或Cron表达式(如 0 0/5 * * * ?表示每5分钟一次)定义。
当流程定义中包含定时器事件(如定时开始事件、定时边界事件)并被部署到引擎后,相关的定时器信息会被持久化到数据库的 ACT_RU_JOB等表中。Job Executor会定期扫描这些表,一旦到达设定的执行时间(DUEDATE_),便会创建相应的作业并执行。
# 定时器事件
# 开始事件
定时开始事件用于在指定的时间点或按设定的周期自动创建流程实例,而无需通过API手动触发。
- 适用场景: 非常适合需要自动运行的批处理任务或定期执行的业务流程,例如每天凌晨生成报表、每周一同步数据等。
- 注意事项: 子流程不能拥有定时开始事件。流程一旦部署,定时开始事件就会被调度。此时再手动调用 startProcessInstanceBy...方法会创建额外的流程实例,需要注意避免重复启动。
# 边界事件
定时边界事件像闹钟一样附着在某个用户任务或服务任务上,用于监控该活动的执行是否超时。它可以是 中断(Interrupting) 或非中断(Non-Interrupting 的。
中断型边界事件:当定时器触发时,会中断当前的活动(例如,正在执行的用户任务会被取消),流程会沿着边界事件的出口连线继续执行。这非常适用于超时处理,比如一个审批任务若在30分钟内未完成,则自动转交给其他人处理或直接升级。
非中断型边界事件:当定时器触发时,当前活动不会被中断,而是会同时创建一条新的执行分支。这常用于实现提醒功能,例如,在任务即将到期时,每隔一段时间发送一次提醒通知,而主要的审批流程仍可正常进行和完成。
# 中间事件
这种事件放置在两个任务之间,当流程执行到此时会暂停下来,等待一段时间后再继续向后执行。它就像一个流程中的 "秒表"或"暂停按钮"。
- 适合场景: 适用于需要在流程中引入强制延迟或等待期的场景。例如,在提交订单后,插入一个"等待24小时"的中间事件,以留给用户取消订单的缓冲时间。