是否异步延续,正常情况下,完成节点任务和验证下一个节点的地址是同一个事务中进行,所以如果完成了任务并到达下一个节点时发生了异常,就会回滚当前事务,回滚已完成的任务,重新执行。
但是有时我想一个节点完成了就提交事务,不要依赖下一个节点,也就是不管下一个节点发生什么都不关已完成的节点的事。要实现这种,可使用Asynchronous来实现完成任务在一个事务中执行,验证下一个节点的地址操作交给定时任务异步来完成。
假如现在流程图只有三个节点:开始--》用户任务--》结束
用户任务勾选Asynchronous,流程启动并且开始节点执行完成后,流程不会马上就到达用户任务,而是暂停并交给给定时任务异步来完成,定时任务执行时间和次数可在act_ru_job表中查看,用户任务还没在任务表中生成,默认等待5分钟后才会在act_ru_task表生成用户任务,但我不想等那么久,所以我使用ManagementService中的managementService.executeJob来手动执行定时任务,这是任务表中就有用户任务了。
application.xml需要配置异步线程池,取代jobExecutorActivate
spring:
activiti:
async-executor-enabled: true
async-executor-activate: true
手动获取定时任务并执行:
Map variableMap = new HashMap();
ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess_1", variableMap);
Job job = managementService.createJobQuery().executionId(pi.getId()).singleResult();
managementService.executeJob(job.getId());