SpringBoot搭建Activiti整合流程設計器(一步一步教你配置)
轉載請註明出處:猿小雷,https://blog.csdn.net/qq_34638225
1、框架搭建
在IDE裡新建SpringBoot專案,在pom.xml裡引入如下依賴 pom.xml
<?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
ACTIVITI.CONFIG = {
'contextRoot' : '/service',
};
後端
StencilsetRestResource #獲取編輯器元件及配置項資訊。
ModelEditorJsonRestResource #根據modelId獲取model的節點資訊,編輯器根據返回的json進行繪圖。
ModelSaveRestResource #編輯器製圖之後,將節點資訊以json的形式提交給這個Controller,然後由其進行持久化操作。
需要修改的地方就三個,在每個Controller類上加上@RequestMapping註解,並指定值為”service”(對應前臺app-cfg.js中配置的url)。
@RequestMapping("service")
public class StencilsetRestResource {
@RequestMapping("service")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
@RequestMapping("service")
public class ModelSaveRestResource implements ModelDataJsonConstants {
最後別忘了新增包掃描,掃描activiti提供的這些controller(這裡涉及到的org.activiti到下載)
@SpringBootApplication
@ComponentScan({"org.activiti","com"})
@EnableAutoConfiguration(exclude={SecurityAutoConfiguration.class})
記住在.properies檔案或者.yml檔案里加上
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裡