【弄nèng - Activiti6】Activiti6入门篇(十五)—— 定时器中间事件
文章目录
- 1. 定时器中间事件
- 1.1 简介
- 1.2 流程设计
- 1.3 测试类
- 1.4 运行
- 1.4.1 启动任务
- 源码地址
- 项目推荐
部分简介摘抄自官方文档
事例参考杨大仙的程序空间https://my.oschina.net/JavaLaw
*后台服务基于Springboot2 + Activiti6,整合文章请参考:https://blog.csdn.net/yy756127197/article/details/101211510 不需要流程设计器就排除3,4步骤 *
1. 定时器中间事件
1.1 简介
定时器中间事件是一个Catching事件,当执行到达捕获事件节点, 就会启动一个定时器。 当定时器触发(一段时间之后),流程就会沿着定时中间事件的外出节点继续执行。
1.2 流程设计
场景:用户支付成功后等待一分钟,商家发货
设置
说明
PT1M:一分钟后
参数设置方法同定时器边界事件
流程图
流程文件bpmn
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="intermediateTimerCatch" name="intermediateTimerCatch" isExecutable="true"><documentation>intermediateTimerCatch</documentation><startEvent id="startEvent1"></startEvent><endEvent id="sid-AFE32B9E-81CC-4EC5-ABAA-B99784EBB95A"></endEvent><userTask id="sid-388B4ACB-0E9E-4913-83EC-EE919DAF5A9E" name="支付" activiti:assignee="timerUser3"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-13C0A8C0-9C37-44CE-BC66-D63998A6D1DD" sourceRef="startEvent1" targetRef="sid-388B4ACB-0E9E-4913-83EC-EE919DAF5A9E"></sequenceFlow><intermediateCatchEvent id="sid-0724FCAA-6DE2-4052-A902-4C94E3FA2AA0"><timerEventDefinition><timeDuration>PT1M</timeDuration></timerEventDefinition></intermediateCatchEvent><sequenceFlow id="sid-0D236CC4-3763-445F-8526-FC0355F02FE6" sourceRef="sid-388B4ACB-0E9E-4913-83EC-EE919DAF5A9E" targetRef="sid-0724FCAA-6DE2-4052-A902-4C94E3FA2AA0"></sequenceFlow><userTask id="sid-C90A139C-91FF-460C-AF11-93641F21CC3E" name="发货" activiti:assignee="timerUser4"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-C4801F9E-EB4F-4919-9239-9F2283B3A473" sourceRef="sid-0724FCAA-6DE2-4052-A902-4C94E3FA2AA0" targetRef="sid-C90A139C-91FF-460C-AF11-93641F21CC3E"></sequenceFlow><sequenceFlow id="sid-F2A021B5-A2A6-457B-B3F9-6AF1D5F479BA" sourceRef="sid-C90A139C-91FF-460C-AF11-93641F21CC3E" targetRef="sid-AFE32B9E-81CC-4EC5-ABAA-B99784EBB95A"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_intermediateTimerCatch"><bpmndi:BPMNPlane bpmnElement="intermediateTimerCatch" id="BPMNPlane_intermediateTimerCatch"><bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"><omgdc:Bounds height="30.0" width="30.0" x="105.0" y="145.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-AFE32B9E-81CC-4EC5-ABAA-B99784EBB95A" id="BPMNShape_sid-AFE32B9E-81CC-4EC5-ABAA-B99784EBB95A"><omgdc:Bounds height="28.0" width="28.0" x="690.0" y="146.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-388B4ACB-0E9E-4913-83EC-EE919DAF5A9E" id="BPMNShape_sid-388B4ACB-0E9E-4913-83EC-EE919DAF5A9E"><omgdc:Bounds height="80.0" width="100.0" x="225.0" y="120.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-0724FCAA-6DE2-4052-A902-4C94E3FA2AA0" id="BPMNShape_sid-0724FCAA-6DE2-4052-A902-4C94E3FA2AA0"><omgdc:Bounds height="31.0" width="31.0" x="405.0" y="144.5"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-C90A139C-91FF-460C-AF11-93641F21CC3E" id="BPMNShape_sid-C90A139C-91FF-460C-AF11-93641F21CC3E"><omgdc:Bounds height="80.0" width="100.0" x="510.0" y="120.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sid-C4801F9E-EB4F-4919-9239-9F2283B3A473" id="BPMNEdge_sid-C4801F9E-EB4F-4919-9239-9F2283B3A473"><omgdi:waypoint x="436.9998964866937" y="160.4424464155155"></omgdi:waypoint><omgdi:waypoint x="510.0" y="160.1798561151079"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-0D236CC4-3763-445F-8526-FC0355F02FE6" id="BPMNEdge_sid-0D236CC4-3763-445F-8526-FC0355F02FE6"><omgdi:waypoint x="325.0" y="160.17123287671234"></omgdi:waypoint><omgdi:waypoint x="405.0000938254085" y="160.44520580077196"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-13C0A8C0-9C37-44CE-BC66-D63998A6D1DD" id="BPMNEdge_sid-13C0A8C0-9C37-44CE-BC66-D63998A6D1DD"><omgdi:waypoint x="135.0" y="160.0"></omgdi:waypoint><omgdi:waypoint x="225.0" y="160.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-F2A021B5-A2A6-457B-B3F9-6AF1D5F479BA" id="BPMNEdge_sid-F2A021B5-A2A6-457B-B3F9-6AF1D5F479BA"><omgdi:waypoint x="610.0" y="160.0"></omgdi:waypoint><omgdi:waypoint x="690.0" y="160.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>
1.3 测试类
IntermediateTimerCatchTest.java
import com.it.cloud.modules.activiti.service.IActReModelService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 服务任务测试*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class IntermediateTimerCatchTest {@Autowiredprivate IActReModelService actReModelService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate RepositoryService repositoryService;@Autowiredprivate TaskService taskService;@Autowiredprivate HistoryService historyService;/*** 部署流程定义*/@Testpublic void deploy() {Deployment deployment = repositoryService.createDeployment() // 创建部署.addClasspathResource("diagrams/intermediateTimerCatch.bpmn20.xml") // 加载流程资源文件.name("intermediateTimerCatch流程") // 流程名称.deploy(); // 部署System.out.println("流程部署ID:" + deployment.getId());System.out.println("流程部署Name:" + deployment.getName());}/*** 启动流程实例*/@Testpublic void start() throws InterruptedException {ProcessInstance pi = runtimeService.startProcessInstanceByKey("intermediateTimerCatch"); // 流程定义表的KEY字段值System.out.println("流程实例ID:" + pi.getId());System.out.println("流程定义ID:" + pi.getProcessDefinitionId());System.out.println("-------------------完美的分割线-------------------");Task task = taskService.createTaskQuery().taskAssignee("timerUser3") // 指定某个人.singleResult();System.out.println("task name: " + task.getName());taskService.complete(task.getId());System.out.println("暂停70秒钟");Thread.sleep(1000 * 70);task = taskService.createTaskQuery().taskAssignee("timerUser4") // 指定某个人.singleResult();System.out.println("task name: " + task.getName());taskService.complete(task.getId());}
}
1.4 运行
运行deploy()
1.4.1 启动任务
运行start()
效果:
源码地址
IT-CLOUD-ACTIVITI6
开源项目,持续更新中,喜欢请 Star~
项目推荐
IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
开源项目,持续更新中,喜欢请 Star~
【弄nèng - Activiti6】Activiti6入门篇(十五)—— 定时器中间事件相关推荐
- 【弄nèng - Grafana】入门篇(十)—— Dashboard默认时间范围和刷新时间设置
文章目录 1. Dashboard通用设置 General 2. 修改Dashboard默认时间范围 3. 修改某个Panel时间 项目推荐 Dashboard修改默认时间范围 1. Dashboar ...
- 【弄nèng - Skywalking】入门篇(二)—— Skywalking集群部署
文章目录 一. 安装OAP 1.1 前置 1.2 下载 1.3 修改配置application.yml 1.4 高级部署 1.5 webapp配置 1.6 启动 二. 使用Agent 2.1 修改配置 ...
- [转]周易入门三十五问答
周易入门三十五问答 http://mt.sohu.com/20150714/n416782382.shtml 1.问:何谓<周易>? 答:<周易>是我国古代哲学.自然科学与社会 ...
- 计算机 发声原理,耳机 篇十五:动铁耳机发声原理哦。喜欢记得收藏。
耳机 篇十五:动铁耳机发声原理哦.喜欢记得收藏. 2019-01-15 04:14:27 4点赞 0收藏 0评论 动铁式耳机是通过一个结构精密的连接棒传导到一个微型振膜的中心点,从而产生振动并发声的耳 ...
- Inno Setup入门(十五)——Inno Setup类参考(1)
Inno Setup入门(十五)--Inno Setup类参考(1) nno setup脚本能够支持许多的类,这些类使得安装程序的功能得到很大的加强,通过对这些类的使用,将会创建出许多让人惊奇的安装程 ...
- OpenGL入门学习(十五)
OpenGL入门学习[十五] 这次讲的所有内容都装在一个立方体中,呵呵. 呵呵,绘制一个立方体,简单呀,我们学了第一课第二课,早就会了. 先别着急,立方体是很简单,但是这里只是拿立方体做一个例子,来说 ...
- coreelec 下载app_DY的瞎折腾系列 篇十五:N1多媒体系统CoreELEC 百度云下载指南...
DY的瞎折腾系列 篇十五:N1多媒体系统CoreELEC 百度云下载指南 2019-04-26 15:28:57 64点赞 427收藏 117评论 你是AMD Yes党?还是intel和NVIDIA的 ...
- Reflex WMS入门系列十五:Reflex系统上对已经Confirm的Receipt能继续做收货么?
Reflex WMS入门系列十五:Reflex系统上对已经Confirm的Receipt能继续做收货么? 如下的Receipt已经完成了收货,并且已经confirm了, Cfm(confirm)栏位被 ...
- hp9000 e25服务器 显示器,DIY瞎折腾 篇十五:又挽救了一台显示器-HP 2011X-附翻车过程...
DIY瞎折腾 篇十五:又挽救了一台显示器-HP 2011X-附翻车过程 2021-03-12 20:23:38 3点赞 9收藏 4评论 创作立场声明:节能环保,废物利用,交流过程,希望大家剩下钱,买更 ...
- jmeter参数值只读取了第一个_基础入门篇Jmeter(五)_函数
JMeter提供了很多函数,如果能够熟练使用,可以为脚本带来很多方便.JMeter函数是一种特殊值,可用于除测试计划外的任何组件.函数调用的格式如下所示: ${__functionName(var1, ...
最新文章
- DP_knapsack
- zookeeper和duboo 没用
- setTimeOut()
- 菜鸟学python 哪吒_Python 学习之路 (前言)
- Ubuntu 9.0 下之HBase 0.90.4 的安装和使用
- 巧用css text-indent减小中文标点符号的占位大小
- html表格固定行高_Excel表格向Word复制不变形,Word表格向Excel复制不变形,一次全掌握。...
- Java sqlite事务方法,Java SQLiteDatabase.insert方法代码示例
- Spring 学习笔记(二)Spring AOP
- 一次难忘的 MTS 故障的排除过程
- windows下gradle下使用windows版普罗米修斯prometheus和metrics简单的制作一个监控java环境的内存状况的教程
- .net core 填坑记之—格式转换问题
- 创业在微软——微软亚洲工程院成长启示(双色)
- hihoCoder 1388(fft)
- 区块链 p2p点对点网络是什么
- 基于ricequant隐马尔科夫模型量化交易
- 服务器遇到DDOS攻击怎么办?
- html怎么打五角星符号怎么打,五角星符号怎么打,五角星符号大全
- Linux中alias永久更改命令别名
- linux打包文件夹命令
热门文章
- delphi 删除文件夹
- 那些年啊,那些事——一个程序员的奋斗史 ——123
- (零代) MDD 开创低代码领行设计模式
- 春节青岛-江浙沪自驾游
- 2021林伟华中学高考成绩查询,2021年汕尾高考状元名单公布,汕尾高考状元学校资料及最高分...
- “陪伴是最长情的告白”:可是又有多少人真正懂得它的含义呢
- 2021-2027全球与中国精密金属零部件市场现状及未来发展趋势
- 美国证监会给区块链股票降温
- 【算法设计与分析】8枚硬币及n枚硬币问题
- [XCTF-pwn] 31_ciscn-2018-Quals_house_of_grey