【第九篇】Camunda系列-事件篇-定时器事件

2022-10-28 11:29:07 浏览数 (1)

事件篇

事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)抛出(throwing)*事件。

  • 捕获: 当流程执行到达这个事件时,会等待直到触发器动作。触发器的类型由其中的图标,或者说XML中的类型声明而定义。捕获事件与抛出事件显示上的区别,是其内部的图标没有填充(即是白色的)。
  • 抛出: 当流程执行到达这个事件时,会触发一个触发器。触发器的类型,由其中的图标,或者说XML中的类型声明而定义。抛出事件与捕获事件显示上的区别,是其内部的图标填充为黑色。

1. 定时器事件

  定时触发的相关事件,包括定时器启动事件,定时器捕获中间件事件,定时器边界事件

1.1 定时器启动事件

  定时器启动事件(timer start event)在指定时间创建流程实例。在流程只需要启动一次,或者流程需要在特定的时间间隔重复启动时,都可以使用。

*请注意:*子流程不能有定时器启动事件。

*请注意:*定时器启动事件,在流程部署的同时就开始计时。不需要调用startProcessInstanceByXXX就会在时间启动。调用startProcessInstanceByXXX时会在定时启动之外额外启动一个流程。

*请注意:*当部署带有定时器启动事件的流程的更新版本时,上一版本的定时器作业会被移除。这是因为通常并不希望旧版本的流程仍然自动启动新的流程实例。

定时器启动事件,用其中有一个钟表图标的圆圈来表示。我们通过具体案例来介绍

部署流程后等待到具体的时间,我们查看任务即可

时间定义这块使用的是 https://en.wikipedia.org/wiki/ISO_8601#Dates ISO 8601 格式

上面我们是通过指定固定时间来启动的,我们也可以通过duraction间隔时间来处理。

通过间隔的方式来启动。

timeCycle:指定重复周期,可用于周期性启动流程,或者为超期用户任务多次发送提醒,这个元素可以使用两种格式

  • 第一种是按照ISO 8601标准定义的循环时间周期。例如(三次重复间隔,每次间隔为10小时):R3/PT10H
  • 也可以使用timeCycle的可选属性endDate,或者像这样直接写在时间表达式的结尾:R3/PT10H/${EndDate}。 当到达endDate时,应用会停止,并为该任务创建其他作业
  • 也可以通过cron表达式来处理

案例:重复时间设置为 R3PT30S 重复3次,间隔30描述,自动任务绑定的是JavaDelegate

代码语言:javascript复制
public class MyJavaDelegate implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("MyJavaDelegate:执行了。。。"  LocalDateTime.now().toString());
    }
}

在控制台可以看到对应的效果

也可以指定结束时间

代码语言:javascript复制
      <timerEventDefinition>
        <timeCycle>R3/PT30S/2022-03-28T21:46:11 00:00</timeCycle>
      </timerEventDefinition>

此外还可以通过cron表达式来处理:

代码语言:javascript复制
0 0/5 * * * ?

每隔5秒启动

1.2 定时器中间事件

  在我们具体的流程处理中,A节点处理完成后,定时触发B节点的处理。

1.3 定时器边界事件

  人工任务1如果在定义的2022-09-27T23:36:14这个时间之前还没有处理,那么就会触发定时边界事件,从而从人工任务3.

xml

0 人点赞