1. 定时器
1.1. 流程定义定时激活
在之前松哥给小伙伴们介绍流程定义的时候,流程都是定义好之后立马就激活了,其实在流程定义的这个过程中,我们还可以设置一个激活时间,也就是流程定义好之后,并不会立马激活(不激活就不能据此流程定义创建新流程),而是在延迟某一个固定时间之后,才会激活,代码如下:
@RestController
public class ProcessDeployController {
@Autowired
RepositoryService repositoryService;
@PostMapping("/deploy")
public RespBean deploy(MultipartFile file,String tenantId) throws IOException {
System.out.println(new Date());
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment()
.category("javaboy的工作流分类")
.name("javaboy的工作流名称")
.addInputStream("fff.bpmn", file.getInputStream())
.tenantId(tenantId)
.activateProcessDefinitionsOn(new Date(System.currentTimeMillis() + 1000 * 60))
.key("javaboy的工作流key666");
Deployment deployment = deploymentBuilder
.deploy();
return RespBean.ok("部署成功",deployment.getId());
}
}
复制代码
.activateProcessDefinitionsOn(new Date(System.currentTimeMillis() + 1000 * 60))
表示流程在延迟一分钟之后,才激活。
此时,我们启动项目,然后调用该接口部署一个流程,部署完成之后,如果立马调用流程启动方法去启动流程,就会抛出如下异常:
可以看到,这里也说的很明确了,这个流程定义目前是一个挂起的状态,无法启动。
这个时候,我们去查看 ACT_RU_TIMER_JOB
表,就会发现该表中多了一条定时任务执行计划:
该表有一个 DUEDATE_
字段,这个字段描述了这个定时任务执行的具体时间,在到达时间后,定时任务会自动执行,将 ACT_RE_PROCDEF
表中,流程的状态字段 SUSPENSION_STATE_
由 2 改为 1。
1.2. 流程实例定时挂起
除了流程定义可以定时挂起外,流程实例也可以定时挂起。方式如下:
@Autowired
RepositoryService repositoryService;
@Test
void te