0、前言
- springboot 2.1.5.RELEASE,試過其他版本如2.5.x,直接報錯;2.3.x,報log。。。異常。
- activiti dependence 7.1.24
- MySQL5.7
1、目錄截圖
2、流程設計
bpmn.js設計後導出, 但是無法配置isExecutable=TRUE
詳見附錄《 diagram.bpmn檔案内容》
2、pom檔案
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<activiti-dependencies.version>7.1.24</activiti-dependencies.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>${activiti-dependencies.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>alfresco</id>
<name>Activiti Releases</name>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
3、application.yml
spring:
datasource:
url: jdbc:mysql://192.168.1.13:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
username: root
password: '123456'
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialization-mode: always
activiti:
database-schema-update: true
history-level: full
db-history-used: true
4、啟動類
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author LaoHa
* @Date 2021/7/2
*/
@SpringBootApplication
public class AppStart {
public static void main(String[] args) {
SpringApplication.run(AppStart.class,args);
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.name("我的請假流程")
.addClasspathResource("bpmn/diagram.bpmn")
.deploy();
System.out.println(deployment.getId());
System.out.println(deployment.getName());
}
}
5、運作效果
- 建立activiti資料庫
附錄
- diagram.bpmn檔案内容
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="sid-38422fae-e03e-43a3-bef4-bd33b32041b2" targetNamespace="http://bpmn.io/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="8.7.1">
<process id="Process_1" isExecutable="true">
<startEvent id="StartEvent_1y45yut" name="startEvent">
<outgoing>SequenceFlow_0h21x7r</outgoing>
</startEvent>
<sequenceFlow id="SequenceFlow_0h21x7r" sourceRef="StartEvent_1y45yut" targetRef="Task_1hcentk" />
<userTask id="Task_1hcentk" name="holiday apply">
<incoming>SequenceFlow_0h21x7r</incoming>
<outgoing>SequenceFlow_0wnb4ke</outgoing>
</userTask>
<exclusiveGateway id="ExclusiveGateway_15hu1pt" name="Exclusive GateWay">
<incoming>SequenceFlow_0wnb4ke</incoming>
<outgoing>Flow_01xjf9l</outgoing>
<outgoing>Flow_1bg6oi0</outgoing>
</exclusiveGateway>
<sequenceFlow id="SequenceFlow_0wnb4ke" sourceRef="Task_1hcentk" targetRef="ExclusiveGateway_15hu1pt" />
<sequenceFlow id="Flow_01xjf9l" sourceRef="ExclusiveGateway_15hu1pt" targetRef="Activity_12fkaph" />
<userTask id="Activity_12fkaph" name="manager check">
<incoming>Flow_01xjf9l</incoming>
<outgoing>Flow_0kximvf</outgoing>
</userTask>
<sequenceFlow id="Flow_1bg6oi0" sourceRef="ExclusiveGateway_15hu1pt" targetRef="Activity_1ukrlln" />
<userTask id="Activity_1ukrlln" name="leader check">
<incoming>Flow_1bg6oi0</incoming>
<outgoing>Flow_1rji5ba</outgoing>
</userTask>
<exclusiveGateway id="Gateway_02hpx0d" name="Exclusive GateWay">
<incoming>Flow_1rji5ba</incoming>
<incoming>Flow_0kximvf</incoming>
<outgoing>Flow_16qsj0c</outgoing>
</exclusiveGateway>
<sequenceFlow id="Flow_1rji5ba" sourceRef="Activity_1ukrlln" targetRef="Gateway_02hpx0d" />
<sequenceFlow id="Flow_0kximvf" sourceRef="Activity_12fkaph" targetRef="Gateway_02hpx0d" />
<endEvent id="Event_1p1hhlh" name="EndEvent">
<incoming>Flow_16qsj0c</incoming>
</endEvent>
<sequenceFlow id="Flow_16qsj0c" sourceRef="Gateway_02hpx0d" targetRef="Event_1p1hhlh" />
</process>
<bpmndi:BPMNDiagram id="BpmnDiagram_1">
<bpmndi:BPMNPlane id="BpmnPlane_1" bpmnElement="Process_1">
<bpmndi:BPMNEdge id="SequenceFlow_0wnb4ke_di" bpmnElement="SequenceFlow_0wnb4ke">
<omgdi:waypoint x="320" y="210" />
<omgdi:waypoint x="365" y="210" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0h21x7r_di" bpmnElement="SequenceFlow_0h21x7r">
<omgdi:waypoint x="188" y="210" />
<omgdi:waypoint x="220" y="210" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_01xjf9l_di" bpmnElement="Flow_01xjf9l">
<omgdi:waypoint x="390" y="185" />
<omgdi:waypoint x="390" y="140" />
<omgdi:waypoint x="440" y="140" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1bg6oi0_di" bpmnElement="Flow_1bg6oi0">
<omgdi:waypoint x="390" y="235" />
<omgdi:waypoint x="390" y="270" />
<omgdi:waypoint x="440" y="270" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rji5ba_di" bpmnElement="Flow_1rji5ba">
<omgdi:waypoint x="540" y="270" />
<omgdi:waypoint x="620" y="270" />
<omgdi:waypoint x="620" y="235" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0kximvf_di" bpmnElement="Flow_0kximvf">
<omgdi:waypoint x="540" y="140" />
<omgdi:waypoint x="620" y="140" />
<omgdi:waypoint x="620" y="185" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_16qsj0c_di" bpmnElement="Flow_16qsj0c">
<omgdi:waypoint x="645" y="210" />
<omgdi:waypoint x="692" y="210" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="StartEvent_1y45yut_di" bpmnElement="StartEvent_1y45yut">
<omgdc:Bounds x="152" y="192" width="36" height="36" />
<bpmndi:BPMNLabel>
<omgdc:Bounds x="145" y="235" width="51" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1n7339w_di" bpmnElement="Task_1hcentk">
<omgdc:Bounds x="220" y="170" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ExclusiveGateway_15hu1pt_di" bpmnElement="ExclusiveGateway_15hu1pt" isMarkerVisible="true">
<omgdc:Bounds x="365" y="185" width="50" height="50" />
<bpmndi:BPMNLabel>
<omgdc:Bounds x="424.5" y="196.5" width="47" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1j52f5p_di" bpmnElement="Activity_1ukrlln">
<omgdc:Bounds x="440" y="230" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1bj3888_di" bpmnElement="Activity_12fkaph">
<omgdc:Bounds x="440" y="100" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_02hpx0d_di" bpmnElement="Gateway_02hpx0d" isMarkerVisible="true">
<omgdc:Bounds x="595" y="185" width="50" height="50" />
<bpmndi:BPMNLabel>
<omgdc:Bounds x="537.5" y="196.5" width="47" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1p1hhlh_di" bpmnElement="Event_1p1hhlh">
<omgdc:Bounds x="692" y="192" width="36" height="36" />
<bpmndi:BPMNLabel>
<omgdc:Bounds x="686" y="235" width="49" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>