Flowable中定时器的玩法详解

yizhihongxing

Flowable中定时器的玩法详解

在Flowable中,定时器是一个非常有用的机制,通过它可以实现一些定时执行的任务,比如定时发送邮件、自动归档数据等等。本文将详细介绍Flowable中定时器的使用方法。

什么是定时器

定时器是在流程执行的某个节点上设置一个定时器,然后在设定的时间点上自动执行某些动作的机制。比如,我们可以设置一个定时器,在一个任务节点上,如果任务没有在设定的时间内被处理,那么就自动触发一些事情(比如将任务的状态改成“超时”)。

定时器的使用方法

在流程定义文件中,使用<timerEventDefinition>标签来定义一个定时器事件。下面是一个示例:

<userTask id="userTask1" name="Demo Task">
  <extensionElements>
    <activiti:taskListener event="create" class="com.example.MyTaskListener" />
  </extensionElements>
  <timerEventDefinition>
      <timeDuration>PT1M</timeDuration>
  </timerEventDefinition>
</userTask>

在上面的代码中,我们在“userTask1”任务节点上定义了一个定时器。该定时器使用元素来指定一个持续时间(PT1M),表示需要等待1分钟后才会触发定时器事件。

另外一个使用方式是使用<timeDate>元素来指定一个确切的日期和时间,如下示例:

<userTask id="userTask2" name="Demo Task">
  <extensionElements>
    <activiti:taskListener event="create" class="com.example.MyTaskListener" />
  </extensionElements>
  <timerEventDefinition>
      <timeDate>2022-01-01T00:00:00</timeDate>
  </timerEventDefinition>
</userTask>

在上面的代码中,我们在“userTask2”任务节点上定义了一个定时器。该定时器使用<timeDate>元素来指定一个确切的日期和时间,表示需要等到2022年1月1日0点0分0秒时才会触发定时器事件。

定时器事件监听器

当定时器事件触发后,我们需要定义一个事件监听器来处理这个事件。例如,我们可以使用<boundaryEvent>来定义事件监听器,如下示例:

<userTask id="userTask3" name="Demo Task">
  <extensionElements>
    <activiti:taskListener event="create" class="com.example.MyTaskListener" />
  </extensionElements>
  <boundaryEvent id="timerBoundaryEvent" attachedToRef="userTask3">
    <timerEventDefinition>
      <timeDuration>PT1M</timeDuration>
    </timerEventDefinition>
  </boundaryEvent>
</userTask>

在上面的代码中,我们为任务“userTask3”定义了一个定时器事件监听器。该监听器使用元素来定义,并绑定到了“userTask3”任务节点上。当任务在1分钟内没有被处理时,将触发定时器事件,并执行我们所定义的监听器逻辑。

使用Java代码启动定时器

除了在流程定义文件中定义定时器外,我们还可以使用Java代码来启动一个定时器。下面是一个示例:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess");
TaskService taskService = processEngine.getTaskService();
TimerJobEntity timerJob = new TimerJobEntity();
timerJob.setJobHandlerType("message");
MessageJobDeclaration messageJobDeclaration = new MessageJobDeclaration("updateTaskList", "myTaskList", "Demo Task", new Date());
timerJob.setJobHandlerConfiguration(messageJobDeclaration.getJobHandlerConfiguration());
processEngine.getManagementService().scheduleTimerJob(timerJob);

在上面的代码中,我们使用ProcessEngine对象来获取运行时服务和任务服务。然后,我们创建一个TimerJobEntity对象,并使用jobHandlerTypejobHandlerConfiguration属性来设置定时器的类型和配置项。最后,我们使用ManagementService的scheduleTimerJob()方法来启动定时器,并将其绑定到当前流程实例上。

示例

下面是一个使用定时器来完成自动签收任务的示例:

<process id="autoClaimTask" name="自动签收任务">
  <startEvent id="startEvent1" />
  <userTask id="userTask1" name="Demo Task">
    <extensionElements>
      <activiti:taskListener event="create" class="org.activiti.examples.MyTaskListener" />
    </extensionElements>
    <extensionElements>
      <activiti:async>false</activiti:async>
    </extensionElements>
    <extensionElements>
      <activiti:taskListener event="assignment" class="org.activiti.examples.AutoClaimTaskListener" />
    </extensionElements>
    <timerEventDefinition>
      <timeDuration>PT1M</timeDuration>
    </timerEventDefinition>
  </userTask>

  <endEvent id="endEvent1" />
  <sequenceFlow id="flow1" sourceRef="startEvent1" targetRef="userTask1" />
  <sequenceFlow id="flow2" sourceRef="userTask1" targetRef="endEvent1" />
</process>

在上面的代码中,我们在“userTask1”任务节点上定义了一个定时器。该定时器使用元素来指定一个持续时间(PT1M),表示需要等待1分钟后才会触发定时器事件。

在Java代码中,我们创建了两个任务分配监听器。其中,第一个监听器MyTaskListener用来在任务创建时进行一些初始化操作,例如对任务的处理时间进行赋值。另外一个监听器AutoClaimTaskListener用于自动签收任务。

public class AutoClaimTaskListener implements TaskListener {

  public void notify(DelegateTask delegateTask) {
    delegateTask.setAssignee("kermit");
  }
}

在上面的代码中,我们通过在任务分配监听器中,将任务自动指派给“kermit”用户,使得任务在超时后会自动被“kermit”签收。

总结

本文介绍了Flowable中定时器的使用方法,并提供了几个示例,希望对读者有所帮助。总的来说,Flowable中定时器是一个非常方便的工具,可以帮助我们简化工作流程中的一些操作,提高工作效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flowable中定时器的玩法详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue实现指定区域自由拖拽、打印功能

    实现指定区域自由拖拽、打印功能的攻略如下: 准备 安装Vue和Vue-draggable插件 npm install vue vue-draggable 自由拖拽 在Vue的template中,使用vue-draggable插件的vuedraggable组件定义拖拽区域。 <template> <div> <h1>可拖拽项…

    Vue 2023年5月28日
    00
  • 基于Vue 2.0的模块化前端 UI 组件库小结

    我给您讲解一下关于“基于Vue 2.0的模块化前端 UI 组件库小结”的完整攻略。 什么是Vue 2.0的模块化前端 UI 组件库 Vue 2.0的模块化前端 UI 组件库是一种基于Vue.js 2.0的前端框架,用于构建和管理UI组件库。这种框架将UI组件库分解成多个小型、可重用、独立的部件,每个部件都有自己的样式和功能。通过使用这些组件,您可以创建一系列…

    Vue 2023年5月27日
    00
  • vue预览 pdf、word、xls、ppt、txt文件的实现方法

    实现网页预览PDF、Word、Excel、PPT、TXT等各种文件格式,一般需要使用第三方库进行实现。本文将介绍如何使用Vue和依赖库来预览这些文件格式。 1. 安装vue2-pdf预览库 Vue2-pdf 是一个基于 Vue 2.0 开发的 PDF 预览组件,支持PDF的浏览、缩放、翻页和导出等操作。具体实现步骤: 安装依赖 npm install vue…

    Vue 2023年5月28日
    00
  • vue实现登录页背景粒子特效

    下面是“vue实现登录页背景粒子特效”的完整攻略。 1. 准备工作 在开始实现登录页的粒子特效前,需要先安装 vue-particles 这个插件,并在项目中引入。 安装 vue-particles: npm install –save vue-particles 引入 vue-particles: 在 main.js 中引入: import VuePar…

    Vue 2023年5月28日
    00
  • ant design 日期格式化的实现

    Ant Design 日期格式化的实现 Ant Design 是蚂蚁金服开发的一套基于 React 的企业级 UI 组件库,其中包含了日期选择器和日期格式化工具。 日期格式化工具 Ant Design 中的日期格式化工具是基于 Moment.js 的 API 实现的。 Moment.js 是一个用于解析、验证、操作和显示日期以及时间的 JavaScript …

    Vue 2023年5月29日
    00
  • 一文详解如何在vue中实现文件预览功能

    下面我将详细讲解如何在Vue中实现文件预览功能。 一、需求 在Web应用中,我们可能需要上传文件,并在上传后进行预览,以便用户确认上传的文件是正确的。因此,我们需要实现文件预览功能。 二、方案 在Vue中实现文件预览功能,通常有以下两种方案: 方案一:使用第三方插件 Vue社区中已经有许多第三方插件实现了文件预览的功能。我们可以通过npm安装相应插件,并根据…

    Vue 2023年5月28日
    00
  • vue parseHTML函数源码解析 AST预备知识

    下面我将给出“vue parseHTML函数源码解析 AST预备知识”的完整攻略。 一、概述 在Vue的源码中,parseHTML函数是实现模板编译的关键函数之一。parseHTML函数的作用是将HTML字符串解析为AST(抽象语法树)。 AST是一种抽象的树状表达方式,它将代码的语法结构进行了抽象和归纳,并以树的形式表现出来。在Vue中,AST用于表示模板…

    Vue 2023年5月27日
    00
  • 基于Vue+Webpack拆分路由文件实现管理

    接下来我会为您详细讲解“基于Vue+Webpack拆分路由文件实现管理”的完整攻略。这个攻略主要分为以下几个步骤: 1. 安装和配置Webpack 首先,我们需要在本地安装Webpack和webpack-dev-server。可以通过执行下面的命令进行安装: npm install webpack webpack-cli webpack-dev-server…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部