`

springboot集成activiti5

 
阅读更多

首先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文件夹下生成测试文件用于测试,大家可参考使用。

 

 

  • 大小: 34.2 KB
  • 大小: 23.2 KB
  • 大小: 54.7 KB
  • 大小: 84.6 KB
  • 大小: 27.1 KB
  • 大小: 56 KB
  • 大小: 69.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics