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的相关事件的使用。
- 事件监听TaskRuntimeEventListeners
事件监听对象:TaskRuntimeEventListeners;事件对象:RuntimeEvent。
TaskRuntimeEvent类型:
这些事件内部还定义有更加细粒度的事件对象。
这里就介绍TaskRuntimeEvent下两个常用的事件对象:TaskAssignedEvent(任务分配事件),TaskCompletedEvent(任务完成事件)。
代码:
@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对象提供了很多的实用方法:
测试:
启动任务
接口:/holidays/start?processDefinitionId=holiday:1:65d9157a-61e6-11eb-aa1f-00d861e5b732&userId=10000
根据参数userId这里就吧任务分配给了10000的用户。接着看看控制台的输出:
我们定义的事件监听就已经生效了,打印出了相关的信息。
继续调用接口:/holidays/apply?days=3&mgr=10001&explain=生病&instanceId=306224db-61e7-11eb-aa1f-00d861e5b732
现在任务已经分配给了部门经理。
代码:
@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()) ;
} ;
}
执行结果:
当任务执行完后,我们配置的任务完成事件就会执行。
- 事件监听ProcessRuntimeEventListener
事件监听对象:ProcessRuntimeEventListener;事件对象:RuntimeEvent。
ProcessRuntimeEvent类型:
配置事件监听器Bean:
@Bean
public ProcessRuntimeEventListener<ProcessCompletedEvent> processCompletedEvent() {
return processCompletedEvent -> {
ProcessInstance instance = processCompletedEvent.getEntity() ;
logger.info("任务发起人:{}" instance.getInitiator()) ;
} ;
}
当一个流程结束的时候会回调该监听事件。
测试(中间过程省略):
当最后一步总经理结束审批后,控制台输出了任务发起人信息。
注意:你如果还是按照之前的代码来启动执行,那么你这里的 任务发起人应该为 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:
这里已经有值了,当任务流程执行完成时这里才会有值。
完毕!!!
各位好心人能不能给个关注 啊!!!
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方法