首先maven配置文件pom.xml增加activiti配置
<!-- 工作流 --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>${activiti.version}</version> </dependency>
activiti.version = 5.22.0
然后查看jar包是否被引入:
在resource下创建activiti的工作流文件的存放文件夹processes
注意刚创建文件夹后processes为空,如果想启动项目测试请在配置文件中加入如下配置
我使用的是eclipse的activiti图形化插件:配置教程:https://blog.csdn.net/lifupingcn/article/details/61197563
创建demo2.bpmn
代码如下:
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test"> <process id="demo2" name="My process" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <userTask id="usertask1" name="请假"></userTask> <userTask id="usertask2" name="审批"></userTask> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="flow1" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow> <sequenceFlow id="flow3" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_demo2"> <bpmndi:BPMNPlane bpmnElement="demo2" id="BPMNPlane_demo2"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="180.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55.0" width="105.0" x="271.0" y="170.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> <omgdc:Bounds height="55.0" width="105.0" x="471.0" y="170.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="690.0" y="180.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="576.0" y="197.0"></omgdi:waypoint> <omgdi:waypoint x="690.0" y="197.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="376.0" y="197.0"></omgdi:waypoint> <omgdi:waypoint x="471.0" y="197.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> <omgdi:waypoint x="165.0" y="197.0"></omgdi:waypoint> <omgdi:waypoint x="271.0" y="197.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
保存后发现生成了demo2.png,这个是生成的流程图片。
下面编写测试代码:
package com.supershen.example.web.demo;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/demo/activiti")
public class ActivitiTestController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@GetMapping("/test")
public void firstDemo() {
// 根据bpmn文件部署流程
Deployment deployment = repositoryService.createDeployment().addClasspathResource("demo2.bpmn").deploy();
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId()).singleResult();
// 启动流程定义,返回流程实例
ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
String processId = pi.getId();
System.out.println("流程创建成功,当前流程实例ID:" + processId);
Task task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
System.out.println("第一次执行前,任务名称:" + task.getName());
taskService.complete(task.getId());
task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
System.out.println("第二次执行前,任务名称:" + task.getName());
taskService.complete(task.getId());
task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
System.out.println("task为null,任务执行完毕:" + task);
}
}
访问:http://localhost:8080/base-admin-mybatis/demo/activiti/test
得到如下结果证明集成成功:
如果报:org.activiti.engine.ActivitiIllegalArgumentException: resource 'demo2.bpmn' not found
是因为未将processes配置到classpath中,所以找不到。
解决办法:进入java builder path
点击ok,重新启动项目,重试,访问成功:
另外说一下eclipse的activiti插件支持junit测试类生成,右键bpmn文件Activiti-》Generate unit test 之后会在test文件夹下生成测试文件用于测试,大家可参考使用。
版权声明:本文为shen_huan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。