时间中间捕获事件
时间中间捕获事件
定义
定时中间事件指在流程中将一个定时器作为独立的节点来运行。定时中间事件是一个 Catching
事件,当流程到达定时中间事件节点的时候,就会启动一个定时器,一直等待被触发,只有当时间
到达了定时器触发,然后流程离开定时中间事件继续向下走。
图形标记
定时器中间事件显示成标准中间捕获事件,内部是一个定时器小图标,如图所示
XML内容
定时器中间事件定义为标准中间捕获事件,指定类型的子元素为 timerEventDefinition 元素:
<process id="timerIntermediateCatchingEventProcess">
<intermediateCatchEvent id="timer">
<timerEventDefinition>
<timeDuration>PT5M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
</process>
以上 xml 代码片段中加粗的部分定义了定时中间捕获事件 intermediateCatchEvent,它通过
timerEventDefinition 子元素设置定时器。
当包含定时中间事件的流程新版本被发布后,处于活动的旧版本的定时器会继续执行,直至旧
版本不再有新的实例产生。
定时器中间事件分三类:
timeDate,timeDuration,timeCycle。
1. timeDate:设置在指定时间触发。
<startEvent id="timerStart">
<timerEventDefinition>
<timeDate>2023-07-14T12:12:14</timeDate>
</timerEventDefinition>
</startEvent>
timeDate 是使用 ISO 8601 格式指定一个确定的时间来触发事件,以上配置表示流程会在 2023-07-14T12:12:14 启动起来。
注意:ISO8601 时间格式,如果要加时间需要前面加 T。
2、timeDuration:置指定一个时间段之后执行。
<startEvent id="timerStart">
<timerEventDefinition>
<timeDuration>PT1S</timeDuration>
</timerEventDefinition>
</startEvent>
timeDuration 是指定定时器之前要等待多长时间。S 表示秒,M 表示分,D 表示天;P 表示时
间段,T 表示精确到时间的时间段。
注意:时间格式依然为 ISO 8601 格式,一年两个月三天四小时五分六秒内,可以写成
P1Y2M3DT4H5M6S,P 是开始标记,T 是时间和日期分割标记,没有日期只有时间 T 是不能省去
的,比如 1 小时执行一次应该写成 PT1H。
3、通过 timeCycle 设置指定定时器的运行周期
<startEvent id="timerStart">
<timerEventDefinition>
<timeCycle>R2/${EndDate}/PT1M</timeCycle>
</timerEventDefinition>
</startEvent>
timeCycle 指定重复执行的间隔,可以用来定期启动流程实例。timeCycle 的设置目前有两种方
式:ISO 8601 和 Cron 表达式。R 表示需要执行的次数,R2/PT1M 表示执行两次,每次间隔 1 分钟。
其中 endDate 是可选的配置,定时器将会在指定的时间停止工作。
注意:使用定时器开始事件需要启动 JobExecutor
操作界面
欢迎加入QQ群学习交流:582010059
视频地址:
演示demo
本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。
深入Activiti流程引擎