SpringBoot搭建Activiti整合流程设计器(一步一步教你配置)

1、框架搭建


在IDE里新建SpringBoot项目,在pom.xml里引入如下依赖
pom.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.jerryl</groupId>
<artifactId>spring-boot-with-activiti</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-with-activiti</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.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>
<activiti.version>5.22.0</activiti.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!--activiti begin-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>

<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>

<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>${activiti.version}</version>
</dependency>

<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>${activiti.version}</version>
</dependency>
<!--activiti end-->
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>


在pom文件中引入Activiti的依赖,mysql的依赖(Activiti默认使用H2内存数据库),thymeleaf依赖(用于和前端页面结合)

2、整合流程设计器


Activiti官网下载Activiti Explorer的WAR文件

进入activiti-explorer文件夹,将下图文件复制到SpringBoot项目的resource/static下
这里写图片描述

其中的editor-app就是编辑器,modeler.html是编辑器的入口页面。
diagram-viewer是流程跟踪插件。

还有一个界面组件文件,在resource下,名称叫stencilset.json。本身是英文的,可以通过替换它来达到汉化的效果。但现在还是先把它放到项目中去。
这里写图片描述

界面组件

在editor-app/app-cfg.js中配置一下项目url。这个url是编辑器相关的后台服务的url。去掉activiti-explorer

1
2
3
ACTIVITI.CONFIG = {
'contextRoot' : '/service',
};


后端

1
2
3
StencilsetRestResource #获取编辑器组件及配置项信息。
ModelEditorJsonRestResource #根据modelId获取model的节点信息,编辑器根据返回的json进行绘图。
ModelSaveRestResource #编辑器制图之后,将节点信息以json的形式提交给这个Controller,然后由其进行持久化操作。


需要修改的地方就三个,在每个Controller类上加上@RequestMapping注解,并指定值为”service”(对应前台app-cfg.js中配置的url)。

1
2
@RequestMapping("service")
public class StencilsetRestResource {


1
2
@RequestMapping("service")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {


1
2
@RequestMapping("service")
public class ModelSaveRestResource implements ModelDataJsonConstants {


最后别忘了添加包扫描,扫描activiti提供的这些controller(这里涉及到的org.activiti到下载)

1
2
3
@SpringBootApplication
@ComponentScan({"org.activiti","com"})
@EnableAutoConfiguration(exclude={SecurityAutoConfiguration.class})


这里写图片描述

记住在.properies文件或者.yml文件里加上

1
2
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false


不然会报错(thymeleaf对html的检查过于严格,通常会设置spring.thymeleaf.mode=LEGACYHTML5)


这样整合部分就基本结束了,此时编辑器已经可以使用了。

至于界面的汉化,界面上各个组件,各个标签上的文字都是在resource下的stencilset.json文件中设置的,可以在网上找一个汉化后的stencilset.json文件替换掉,就能看到中文界面了。

3、前端配置

resource下的资源目录如下图所示
这里写图片描述

index.html里为启动时访问的首页面
这里写图片描述

index.html界面
这里写图片描述

对应的controller都在ModelerController.java里

源码地址:https://github.com/griabcrh/ActivitiDemo