优化方案语文,上海seo网站推广,为什么网站突然打不开,安徽六安发现一例新冠阳性检测者文章目录 一、全局监听器事件类型配置方式(选)日志监听器代码实现xml文件创建全局监听器全局配置类测试流程部署流程启动流程 一、全局监听器 它是引擎范围的事件监听器#xff0c;可以捕获所有的Activiti事件。 事件类型
ActivitiEventType 枚举类中包含全部事件类型
配置方… 文章目录 一、全局监听器事件类型配置方式(选)日志监听器代码实现xml文件创建全局监听器全局配置类测试流程部署流程启动流程 一、全局监听器 它是引擎范围的事件监听器可以捕获所有的Activiti事件。 事件类型
ActivitiEventType 枚举类中包含全部事件类型
配置方式(选) spring bean配置 全局配置类设置config.setEventListeners() config.setEventListeners(Collections.singletonList(new MyGlobalEventListener()));启动流程动态添加并且可以指定要监听的事件类型推荐 runtimeService.addEventListener(new MyGlobalEventListener(), ActivitiEventType.TASK_CREATED, ActivitiEventType.TASK_ASSIGNED, ActivitiEventType.TASK_COMPLETED);class expression delegateExpression
日志监听器
全局配置类开启config.setEnableDatabaseEventLogging(true);
开启后可以在 act_evt_log表中看到相关的日志记录。
代码实现 xml文件
?xml version1.0 encodingUTF-8?
definitions xmlnshttp://www.omg.org/spec/BPMN/20100524/MODEL xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:activitihttp://activiti.org/bpmn xmlns:bpmndihttp://www.omg.org/spec/BPMN/20100524/DI xmlns:omgdchttp://www.omg.org/spec/DD/20100524/DC xmlns:omgdihttp://www.omg.org/spec/DD/20100524/DI typeLanguagehttp://www.w3.org/2001/XMLSchema expressionLanguagehttp://www.w3.org/1999/XPath targetNamespacehttp://www.activiti.org/processdefprocess idglobal-listener name全局事件监听器 isExecutabletruedocumentation测试全局事件监听器/documentationextensionElements!-- 需要高版本的插件才能不爆红 支持class expression delegateExpression 配置方式 --
!-- activiti:eventListener entityTypetask delegateExpression${myGlobalEventListener}/--/extensionElementsstartEvent idsid-30244641-2a1c-43e5-af5b-e77db43488bf name开始documentation开始了/documentation/startEventuserTask idsid-9e62413f-e04f-4c81-8d0c-e73f17e125ec name节点1activiti:assignee${applyUserId} activiti:candidateUsers${candidateUsers} activiti:candidateGroups${candidateGroups}documentation任务节点1/documentation/userTasksequenceFlow idsid-1af5e647-b03c-4b12-807d-4171dfdf7ae9 sourceRefsid-30244641-2a1c-43e5-af5b-e77db43488bf targetRefsid-9e62413f-e04f-4c81-8d0c-e73f17e125ec name顺序流1documentation顺序流1了/documentation/sequenceFlowuserTask idsid-d903cb09-56c2-4cfe-bd05-5ba0699539d0 name节点2documentation任务节点2/documentation/userTasksequenceFlow idsid-300ac02e-dc56-4988-bdd4-fd94a5bb71f7 sourceRefsid-9e62413f-e04f-4c81-8d0c-e73f17e125ec targetRefsid-d903cb09-56c2-4cfe-bd05-5ba0699539d0 name顺序流2documentation顺序流2了/documentation/sequenceFlowendEvent idsid-ace3a923-023c-4226-875c-2a0a30cc1c50 name结束documentation结束了/documentation/endEventsequenceFlow idsid-dbf73610-a8b4-4149-828e-4f5bc252c80d sourceRefsid-d903cb09-56c2-4cfe-bd05-5ba0699539d0 targetRefsid-ace3a923-023c-4226-875c-2a0a30cc1c50 name顺序流3documentation顺序流3了/documentation/sequenceFlow/processbpmndi:BPMNDiagram idBPMNDiagram_execution-listenerbpmndi:BPMNPlane bpmnElementglobal-listener idBPMNPlane_execution-listenerbpmndi:BPMNShape idshape-d4dd6424-1316-4c10-a8f9-f3c501cd4073 bpmnElementsid-30244641-2a1c-43e5-af5b-e77db43488bfomgdc:Bounds x-442.5 y-6.75 width30.0 height30.0//bpmndi:BPMNShapebpmndi:BPMNShape idshape-bcd8743b-6857-42d1-bc71-bd3bb6eed795 bpmnElementsid-9e62413f-e04f-4c81-8d0c-e73f17e125ecomgdc:Bounds x-388.0 y-31.75 width100.0 height80.0//bpmndi:BPMNShapebpmndi:BPMNEdge idedge-d562b253-050f-4617-bbad-2e16950c15e4 bpmnElementsid-1af5e647-b03c-4b12-807d-4171dfdf7ae9omgdi:waypoint x-412.5 y8.25/omgdi:waypoint x-388.0 y8.25//bpmndi:BPMNEdgebpmndi:BPMNShape idshape-cd7c00d6-f5f0-4afe-867c-6f576efc286d bpmnElementsid-d903cb09-56c2-4cfe-bd05-5ba0699539d0omgdc:Bounds x-259.0 y-31.75 width100.0 height80.0//bpmndi:BPMNShapebpmndi:BPMNEdge idedge-44a5c4d2-2ab7-48f1-adc7-c7a7a099800c bpmnElementsid-300ac02e-dc56-4988-bdd4-fd94a5bb71f7omgdi:waypoint x-288.0 y8.25/omgdi:waypoint x-259.0 y8.25//bpmndi:BPMNEdgebpmndi:BPMNShape idshape-05cc9b19-8019-471d-b31c-bb41c42e3529 bpmnElementsid-ace3a923-023c-4226-875c-2a0a30cc1c50omgdc:Bounds x-123.0 y-6.75 width30.0 height30.0//bpmndi:BPMNShapebpmndi:BPMNEdge idedge-923723d0-33e3-4a62-bed9-bb16d4c9b175 bpmnElementsid-dbf73610-a8b4-4149-828e-4f5bc252c80domgdi:waypoint x-159.0 y8.25/omgdi:waypoint x-123.0 y8.25//bpmndi:BPMNEdge/bpmndi:BPMNPlane/bpmndi:BPMNDiagram
/definitions创建全局监听器
Component(myGlobalEventListener)
public class MyGlobalEventListener implements ActivitiEventListener {Overridepublic void onEvent(ActivitiEvent event) {System.out.println(MyGlobalEventListener);switch (event.getType()) {case TASK_CREATED:this.taskCreate(event);break;case TASK_ASSIGNED:this.taskAssigned(event);break;case TASK_COMPLETED:this.taskComplete(event);break;default:System.out.println(Event received: event.getType());}}/*** 上面的 onEvent 方法抛出异常的后续处理动作* false :表示忽略onEvent()方法方法中抛出的异常* true :表示onEvent()方法中抛出的异常继续向上传播导致当前操作失败*/Overridepublic boolean isFailOnException() {return false;}private void taskCreate(ActivitiEvent event) {System.out.println(任务创建事件);ActivitiEntityEventImpl activitiEntityEvent (ActivitiEntityEventImpl) event;TaskEntity taskEntity (TaskEntity) activitiEntityEvent.getEntity();System.out.println(taskEntity.getId() taskEntity.getId());System.out.println(taskEntity.getName() taskEntity.getName());System.out.println(taskEntity.getAssignee() taskEntity.getAssignee());System.out.println(taskEntity.getIdentityLinks() taskEntity.getIdentityLinks());System.out.println(taskEntity.getVariables() taskEntity.getVariables());}private void taskAssigned(ActivitiEvent event) {System.out.println(任务分配事件);ActivitiEntityEventImpl activitiEntityEvent (ActivitiEntityEventImpl) event;TaskEntity taskEntity (TaskEntity) activitiEntityEvent.getEntity();System.out.println(taskEntity.getId() taskEntity.getId());System.out.println(taskEntity.getName() taskEntity.getName());System.out.println(taskEntity.getAssignee() taskEntity.getAssignee());System.out.println(taskEntity.getIdentityLinks() taskEntity.getIdentityLinks());System.out.println(taskEntity.getVariables() taskEntity.getVariables());}private void taskComplete(ActivitiEvent event) {System.out.println(任务完成事件);ActivitiEntityEventImpl activitiEntityEvent (ActivitiEntityEventImpl) event;TaskEntity taskEntity (TaskEntity) activitiEntityEvent.getEntity();System.out.println(taskEntity.getId() taskEntity.getId());System.out.println(taskEntity.getName() taskEntity.getName());System.out.println(taskEntity.getAssignee() taskEntity.getAssignee());System.out.println(taskEntity.getIdentityLinks() taskEntity.getIdentityLinks());System.out.println(taskEntity.getVariables() taskEntity.getVariables());}
}全局配置类
Configuration
public class Activiti7Config {Autowiredprivate SpringProcessEngineConfiguration config;PostConstructpublic void springProcessEngineConfiguration() {// 设置自定义的全局事件监听器其他配置方式就不需要配置了。
// config.setEventListeners(Collections.singletonList(new MyGlobalEventListener()));// 开启日志监听开启后对性能有影响 act_evt_logconfig.setEnableDatabaseEventLogging(true);}
}测试流程
RunWith(SpringRunner.class)
SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestActivityGlobalEventListener {Autowiredprivate RepositoryService repositoryService;Autowiredprivate RuntimeService runtimeService;Autowiredprivate TaskService taskService;private static final String PROCESS_INSTANCE_ID 728bb780-3be6-11ee-b0a5-18c04dcd4aee;Testpublic void deployProcess() {Deployment deploy repositoryService.createDeployment().addClasspathResource(processes/global-listener.bpmn20.xml).deploy();System.out.println(deploy deploy);}Testpublic void startProcess() {// 添加全局监听器runtimeService.addEventListener(new MyGlobalEventListener(), ActivitiEventType.TASK_CREATED, ActivitiEventType.TASK_ASSIGNED, ActivitiEventType.TASK_COMPLETED);MapString, Object variables new HashMap();variables.put(applyUserId, user123456);variables.put(candidateUsers, CollectionUtil.newArrayList(zhangsan, lisi, wangwu));variables.put(candidateGroups, CollectionUtil.newArrayList(group1, group2, group3));String processDefinitionKey global-listener;String businessKey processDefinitionKey : 100002;ProcessInstance processInstance runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);System.out.println(processInstance processInstance);// 输出当前任务列表this.printTaskList(processInstance.getId());}Testpublic void completeTask() {// 查询任务Task task taskService.createTaskQuery().processInstanceId(PROCESS_INSTANCE_ID).taskAssignee(user123456).singleResult();taskService.complete(task.getId());}private void printTaskList(String processInstanceId) {// 输出当前任务列表taskService.createTaskQuery().processInstanceId(processInstanceId).orderByTaskCreateTime().asc().list().forEach(k - {System.out.println(任务列表);System.out.println(任务ID k.getId());System.out.println(任务名称 k.getName());System.out.println(任务负责人 k.getAssignee());System.out.println(任务创建时间 k.getCreateTime());System.out.println(身份列表);// 输出用户身份关系列表taskService.getIdentityLinksForTask(k.getId()).forEach(link - {System.out.println(link.getType() link.getType());System.out.println(link.getUserId() link.getUserId());System.out.println(link.getGroupId() link.getGroupId());System.out.println(link.getTaskId() link.getTaskId());});});}}部署流程
运行 deployProcess
启动流程
运行 startProcess可以看到监听到任务节点1的创建和分配事件。