全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2022-11-30_「转」Flowable定时器与实时流程图

您的位置:首页 >> 新闻 >> 行业资讯

Flowable定时器与实时流程图 转载来源:江南一点雨 Flowable 定时器的各种玩法 http://mp.weixin.qq.com/s?__biz=MzI1NDY0MTkzNQ==&mid=2247502416&idx=1&sn=4ba0f9a6ceba439b67c82e2f48dfe3c1&scene=45#wechat_redirect 松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里--TienChin 项目配套视频来啦。 今天我们来聊一聊 Flowable 中的定时器。 1. 流程定义定时激活在之前松哥给小伙伴们介绍流程定义的时候,流程都是定义好之后立马就激活了,其实在流程定义的这个过程中,我们还可以设置一个激活时间,也就是流程定义好之后,并不会立马激活(不激活就不能据此流程定义创建新流程),而是在延迟某一个固定时间之后,才会激活,代码如下: @RestController publicclassProcessDeployController{ @Autowired RepositoryServicerepositoryService; @PostMapping("/deploy") publicRespBeandeploy(MultipartFilefile,StringtenantId)throwsIOException{ System.out.println(newDate()); DeploymentBuilderdeploymentBuilder=repositoryService.createDeployment() .category("javaboy的工作流分类") .name("javaboy的工作流名称") .addInputStream("fff.bpmn",file.getInputStream()) .tenantId(tenantId) .activateProcessDefinitionsOn(newDate(System.currentTimeMillis()+1000*60)) .key("javaboy的工作流key666"); Deploymentdeployment=deploymentBuilder .deploy(); returnRespBean.ok("部署成功",deployment.getId()); } } .activateProcessDefinitionsOn(new Date(System.currentTimeMillis() + 1000 * 60)) 表示流程在延迟一分钟之后,才激活。 此时,我们启动项目,然后调用该接口部署一个流程,部署完成之后,如果立马调用流程启动方法去启动流程,就会抛出如下异常: 可以看到,这里也说的很明确了,这个流程定义目前是一个挂起的状态,无法启动。 这个时候,我们去查看 ACT_RU_TIMER_JOB 表,就会发现该表中多了一条定时任务执行计划: 该表有一个 DUEDATE_ 字段,这个字段描述了这个定时任务执行的具体时间,在到达时间后,定时任务会自动执行,将 ACT_RE_PROCDEF 表中,流程的状态字段 SUSPENSION_STATE_ 由 2 改为 1。 2. 流程实例定时挂起除了流程定义可以定时挂起外,流程实例也可以定时挂起。方式如下: @Autowired RepositoryServicerepositoryService; @Test voidtest23(){ repositoryService.suspendProcessDefinitionByKey("UserTaskDemo",true,newDate(System.currentTimeMillis()+120*1000)); } 这个执行完成后,也会在 ACT_RU_TIMER_JOB 表中添加一条定时任务,在两分钟之后,会自动挂起这个流程定义以及与之相对应的流程。实际上就是将对应表中的 SUSPENSION_STATE_ 字段值由 1 改为 2。 3. 定时任务执行过程前面两个小节,松哥都和大家提到,ACT_RU_TIMER_JOB 表中会保存定时任务信息,时间到了就会自动执行。 但是小伙伴们注意,定时任务每次执行的时候,其实并不是去 ACT_RU_TIMER_JOB 表中查询数据,而是去 ACT_RU_JOB 表中查询数据并执行。 当定时的时间到了后,Flowable 会自动将数据从 ACT_RU_TIMER_JOB 表中移动到 ACT_RU_JOB 表中,然后定时器查询到 ACT_RU_JOB 表中的数据之后,就立马自动执行了。大致上就是这样一个流程。 我给大家手动演示一个。 我现在的流程定义和流程实例都挂起了,我想要在 4 分钟之后,将之全部启动,代码如下: @Test voidtest24(){ repositoryService.activateProcessDefinitionByKey("UserTaskDemo",true,newDate(System.currentTimeMillis()+240*1000)); } 当这行代码执行之后,4 分钟之后,流程定义和流程实例就全部都启动了。但是我现在忽然就不想等四分钟了,我想立马执行,那么我们可以去 ACT_RU_TIMER_JOB 表中找到这个定时任务的 ID,然后执行如下代码: @Autowired ManagementServicemanagementService; @Test voidtest25(){ managementService.moveTimerToExecutableJob("b7e9501d-5075-11ed-9706-acde48001122"); } 这个代码表示将 ID 为 b7e9501d-5075-11ed-9706-acde48001122 的记录由 ACT_RU_TIMER_JOB 表移动到 ACT_RU_JOB 表中,移动完成后,这个任务就会被立马执行。 当一个定时任务开启了,还能不能取消呢?当然可以!我们将这个定时任务放到私信队列表即可,私信队列表是 ACT_RU_DEADLETTER_JOB,具体操作方式如下: @Test voidtest27(){ managementService.moveJobToDeadLetterJob("6b95dc62-5081-11ed-a00f-acde48001122"); } 上面这个方法执行的参数是 ACT_RU_TIMER_JOB 表中的任务 ID,执行完成后,ACT_RU_TIMER_JOB 表中对应的记录就会被移动到 ACT_RU_DEADLETTER_JOB 表中,所以定时任务就不会被执行了。 对于已经移动到私信队列的定时任务,也可以再通过如下方法移动回 ACT_RU_JOB 表中被立马执行(即使时间没到也会立马执行),如下: @Test voidtest26(){ managementService.moveDeadLetterJobToExecutableJob("6b95dc62-5081-11ed-a00f-acde48001122",10); } 参数就是任务 ID。 好啦,几个简单的例子和小伙伴们分享了下 Flowable 中定时器的玩法,感兴趣的小伙伴可以去试试啦~ 松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里--TienChin 项目配套视频来啦。 阅读原文

上一篇:2025-08-04_理想i8的公关危机 下一篇:2024-12-21_刚刚,OpenAI放出最后大惊喜o3,高计算模式每任务花费数千美元

TAG标签:

17
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价