码上敲享录 > Activiti工作流完整开发实例分享 > activiti的Asynchronous属性用法

activiti的Asynchronous属性用法

上一章章节目录下一章 2019-12-30已有5335人阅读 评论(0)

是否异步延续正常情况下,完成节点任务和验证下一个节点的地址是同一个事务中进行,所以如果完成了任务并到达下一个节点时发生了异常,就会回滚当前事务,回滚已完成的任务,重新执行。

但是有时我想一个节点完成了就提交事务,不要依赖下一个节点,也就是不管下一个节点发生什么都不关已完成的节点的事。要实现这种,可使用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());

1

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交