快捷搜索:  汽车  科技

activiti与springboot手动集成(Springboot整合工作流引擎Activiti)

activiti与springboot手动集成(Springboot整合工作流引擎Activiti)测试:这里的taskAssigendEvent对象提供了很多的实用方法:这些事件内部还定义有更加细粒度的事件对象。这里就介绍TaskRuntimeEvent下两个常用的事件对象:TaskAssignedEvent(任务分配事件),TaskCompletedEvent(任务完成事件)。@Configuration public class EventListenerConfig { private static Logger logger = LoggerFactory.getLogger(EventListenerConfig.class) ; @Bean public TaskRuntimeEventListener<TaskAssignedEvent> taskAssignedListener() { return taskAssignedEvent

说明:本篇内容是基于上二篇内容,为了更好地阅读,请先阅览下面两篇文章

Springboot整合工作流引擎Activiti(一)

Springboot整合工作流引擎Activiti(二)

本篇内容比较简单:Activiti的相关事件的使用。

  1. 事件监听TaskRuntimeEventListeners
    事件监听对象:TaskRuntimeEventListeners;事件对象:RuntimeEvent。
    TaskRuntimeEvent类型:

activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(1)

这些事件内部还定义有更加细粒度的事件对象。

这里就介绍TaskRuntimeEvent下两个常用的事件对象:TaskAssignedEvent(任务分配事件),TaskCompletedEvent(任务完成事件)。

  • TaskAssignedEvent
    代码:
  • @Configuration public class EventListenerConfig { private static Logger logger = LoggerFactory.getLogger(EventListenerConfig.class) ; @Bean public TaskRuntimeEventListener<TaskAssignedEvent> taskAssignedListener() { return taskAssignedEvent -> { logger.info("BusinessKey: {}" taskAssignedEvent.getBusinessKey()) ; Task task = taskAssignedEvent.getEntity() ; logger.info("task id: {} name: {} assignee: {}" task.getId() task.getName() task.getAssignee()) ; logger.info("ProcessDefinitionId: {}" taskAssignedEvent.getProcessDefinitionId()) ; } ; } }

    这里只是打印了任务分配的相关信息,这里可以根据自己的业务需要来完成更多的复杂操作。

    这里的taskAssigendEvent对象提供了很多的实用方法:

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(2)

    测试:

    启动任务

    接口:/holidays/start?processDefinitionId=holiday:1:65d9157a-61e6-11eb-aa1f-00d861e5b732&userId=10000

    根据参数userId这里就吧任务分配给了10000的用户。接着看看控制台的输出:

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(3)

    我们定义的事件监听就已经生效了,打印出了相关的信息。

    继续调用接口:/holidays/apply?days=3&mgr=10001&explain=生病&instanceId=306224db-61e7-11eb-aa1f-00d861e5b732

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(4)

    现在任务已经分配给了部门经理。

  • TaskCompletedEvent
    代码:
  • @Bean public TaskRuntimeEventListener<TaskCompletedEvent> taskCompletedEvent() { return taskCompletedEvent -> { logger.info("BusinessKey: {}" taskCompletedEvent.getBusinessKey()) ; Task task = taskCompletedEvent.getEntity() ; logger.info("task id: {} name: {} owner: {}" task.getId() task.getName() task.getOwner()) ; } ; }

    执行结果:

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(5)

    当任务执行完后,我们配置的任务完成事件就会执行。

    1. 事件监听ProcessRuntimeEventListener
      事件监听对象:ProcessRuntimeEventListener;事件对象:RuntimeEvent。
      ProcessRuntimeEvent类型:

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(6)

    配置事件监听器Bean:

    @Bean public ProcessRuntimeEventListener<ProcessCompletedEvent> processCompletedEvent() { return processCompletedEvent -> { ProcessInstance instance = processCompletedEvent.getEntity() ; logger.info("任务发起人:{}" instance.getInitiator()) ; } ; }

    当一个流程结束的时候会回调该监听事件。

    测试(中间过程省略):

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(7)

    当最后一步总经理结束审批后,控制台输出了任务发起人信息。

    注意:你如果还是按照之前的代码来启动执行,那么你这里的 任务发起人应该为 null。

    我这里是更改了下Service启动流程那里添加了一行代码设置了关联信息。

    public void startProcessInstanceAssignVariables(String processDefinitionId Map<String Object> variables) { Authentication.setAuthenticatedUserId((String)variables.get("assignee")) ; ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId variables); logger.info("流程定义ID: {}" processInstance.getProcessDefinitionId()); logger.info("流程实例ID: {}" processInstance.getId()); logger.info("BussinessKey: {}" processInstance.getBusinessKey()) ; }

    Authentication.setAuthenticatedUserId((String)variables.get("assignee")) ;

    assignee: 就是我们启动任务时一开始填写申请单的人。

    就是这个接口:/holidays/start?processDefinitionId=holiday:1:5d69d3a3-61ea-11eb-bbcc-00d861e5b732&userId=10000的userId参数。

    查看表act_hi_procinst:

    activiti与springboot手动集成(Springboot整合工作流引擎Activiti)(8)

    这里已经有值了,当任务流程执行完成时这里才会有值。

    完毕!!!

    各位好心人能不能给个关注 啊!!!

    spring data jpa 高级应用

    Spring MVC 异步请求方式

    Spring MVC 异常处理方式

    Spring Cloud Sentinel 基础配置

    SpringCloud Nacos 整合feign

    SpringBoot开发案例之奇技淫巧

    SpringMVC请求原理源码分析

    springboot 中使用JWT保护资源安全

    SpringBoot2 整合OAuth2实现统一认证

    Java并发编程之CompletionService

    shardingsphere oracle各种问题总结

    Java 8 中的 Streams API 详解

    Java中能用set方法就不要用BeanUtils的copy

    ThreadPoolExecutor 参数说明

    zookeeper实现分布式缓存

    Java线程之join方法

    猜您喜欢: