1. 程式人生 > >springBoot整合Activiti6.0

springBoot整合Activiti6.0

原文地址:https://blog.csdn.net/j1231230/article/details/79880748

資料庫:mysql

IDE:Spring Tool Suite

build工具:Maven

專案版本:springBoot1.5.10 + JDK1.8 + Maven3.0.5 
(之前用的是2.0.0版本的springBoot,整合activiti6後啟動一直報錯,最後發現是版本問題,改為1.5.10就可以了,迷之崩潰o(╥﹏╥)o)

一.構建springBoot

1.建立專案

(1)使用idea建立springboot專案很快,可參考如下連結: 
https://www.cnblogs.com/winner-0715/p/6666302.html

(2)使用eclipse安裝STS外掛的方式,參考連結: 
https://blog.csdn.net/clementad/article/details/51334064 
(可能我的eclipse比較調皮,STS外掛安裝一直沒配置成功,so~我直接下載了STS~)

(3)STS下載地址: 
http://spring.io/tools/sts/all

使用STS建立專案:

新建專案–選擇Spring Boot下的Spring Starter Project–Next

 這裡寫圖片描述 
這裡寫圖片描述 
選擇SpringBoot的版本: 
這裡寫圖片描述 
建立成功後的目錄結構: 
這裡寫圖片描述

 
給pom.xml新增以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2.執行專案

找到整個專案的入口類:MiaoApplication 
 這裡寫圖片描述
這個類有一個@SpringBootApplication註解,這是整個Spring Boot的核心註解,它的目的就是開啟Spring Boot的自動配置。需要在這個類上再新增一個@RestController註解,使之變為一個Controller,然後裡邊提供一個地址轉換方法,如下:

@RestController
@SpringBootApplication 
public class MiaoApplication {
    public static void main(String[] args){ 
        SpringApplication.run(MiaoApplication.class, args); 
    } 
    @GetMapping(value = "/") 
    String index(){
        return "Hello Spring Boot!"; 
    } 
}

然後執行專案,控制檯沒有報錯資訊就說明成功了,在瀏覽器上可以直接訪問: 

這裡寫圖片描述
二.Activiti6安裝執行

1.下載和安裝Activiti6

連結: https://pan.baidu.com/s/1livSJdUm3doUzBZI5AKJWA 
密碼: 2qza 
解壓後發現一共有三個子目錄:database,libs,wars,各個目錄的作用描述如下: 
 這裡寫圖片描述 


2.使用tomcat配置與執行

wars目錄下的三個war包預設使用的是h2記憶體資料庫,重啟伺服器資料就會消失。將3個war包複製到tomcat的webapps的目錄下,更改tomcat的server.xml檔案的Context 為:

<Context docBase="F:\apache-tomcat-7.0.59\webapps\activiti-app.war" path="/" reloadable="true"/>

然後雙擊bin目錄下的startup.bat檔案啟動tomcat,開啟瀏覽器即可訪問: 
(使用者名稱:admin;密碼:test) 

這裡寫圖片描述

PS:如果你的startup.bat雙擊後自動關閉了,有可能和我一樣是java.lang.OutOfMemoryError異常,需要在bin/catalina.bat檔案中找到以下一行:

echo Using CATALINA_BASE:   "%CATALINA_BASE%"

在這行的上面新增:

set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m

重新執行startup.bat即可。

三.Activiti6的使用

Activiti官方釋出的activiti-app可以說是一個較為完善的樣例,可以通過它來了解Activiti的大部分功能。 
登入成功後,可以看到有三個不同的模組:

這裡寫圖片描述
這裡寫圖片描述
下面我們以請假為例,定義一個工作流程。我們知道,請假流程中涉及到的人員有員工和主管,那麼首先需要新建這兩種型別的使用者,之後定義請假流程。

1.新建使用者

點選Idennity management,進入Users模組,點選“Create user”按鈕新建需要請假的員工: 
 這裡寫圖片描述
2.定義流程

點選Kickstart app,進入Processes,點選“Create Process”建立流程。 
流程建立完畢會自動進入流程編輯介面,會有提示告訴你怎麼用,超貼心~ 
通過滑鼠拖拉,即可完成一個流程的定義: 
 這裡寫圖片描述
我們定義了一個開始事件和一個結束事件以及兩個使用者任務,我們需要把使用者任務分配給對應的人員。 
點選第一個使用者任務“提出請假申請”,修改它的“Assignment”屬性,將當前任務分配給Employee: 
 這裡寫圖片描述
同樣,需要把第二個使用者任務分配給manager。任務分配成功後,點選左上角的儲存按鈕儲存當前流程。

3.釋出流程

在activiti-app中,一個App可以包含多個流程模型,因此在釋出流程前,需要新建一個App並設定它的流程模型。 
點選Apps選單下的“Create App”按鈕,建立App: 
 這裡寫圖片描述
建立完成後,將之前建立的流程繫結到該App上,之後釋出該App: 
 這裡寫圖片描述
釋出成功後,使用Employee賬號登入,可以看到釋出成功的HR App,進入該App,點選Processes選單,可以看到“Start a process”按鈕,點選後即可啟動一個請假流程。 
 這裡寫圖片描述
啟動後就由employee使用者完成第一個請假申請: 

這裡寫圖片描述

之後可登入manager使用者進行稽核操作,同樣點選HR App,進入後點擊Processes選單,以同樣方式操作完成任務後,該流程結束。

四.Spring Tool Suite中使用Activiti6

1.修改配置檔案application.properties,儲存為application.yml 
spring: 
datasource: 
driver-class-name: com.mysql.jdbc.Driver 
url: jdbc:mysql://localhost:3306/spring-boot-activiti?useUnicode=true&characterEncoding=utf8&useSSL=false 
username: root 
password: 
jpa: 
show-sql: true 
記得新建一個對應的資料庫:spring-boot-activiti~

2.在pom.xml中新增Activiti6的依賴

前端使用了thymeleaf模板進行展示,因此也需要引入它的依賴:

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>6.0.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.在資源目錄下建立processes目錄

用於儲存.bpmn字尾的流程圖,這個目錄名千萬不要手抖打錯了,相信我,程式一定會報錯的~ 
 這裡寫圖片描述 
4.安裝Activiti外掛 
https://blog.csdn.net/qq_33547950/article/details/54926435

5.在processes檔案下新建bpmn檔案 
 這裡寫圖片描述
6.使用Activiti外掛設計流程圖 

這裡寫圖片描述
需要在IDE裡調出properties面板配置引數:

1).General配置Id和文字,注意Id不能重複; 
 這裡寫圖片描述
2)Main config裡面配置當前任務的代理人Assignee; 
 這裡寫圖片描述
3)Candidate users可以配置當前任務的候選人組,具體應用場景: 
當稽核者有兩個或多個以上,請假申請提交到他們手上後,有一個人認領了該任務,即代表申請被審批通過,這種情況下就需要使用候選人組配置。 
 這裡寫圖片描述
對於有兩個出口連線的任務,我們通過設定連線flow的流程變數的方式來自動控制流程的流轉: 
 這裡寫圖片描述
7.編寫流程程式碼 
 這裡寫圖片描述 
說明: 
1) com.example.MiaoApplication包含了當前demo的主要功能: 
登入;退出;新增請假單;放棄請假;申請請假;稽核請假;獲取請假狀態;獲取請假流程。

2) com.example.controller.MiaoController包含了三個頁面請求,分別為: 
申請人主頁面,稽核人主頁面,請假單填寫頁面;

3) com.example.entity包含了兩個表: 
User表:用於存放當前使用者,登入驗證之前,需要手動在該表內加入資訊,示例如下(type為1代表申請人,2代表稽核人): 
 這裡寫圖片描述
VacationForm表:用於存放請假資訊;

4) com.example.service包含了三個service: 
MiaoService:業務流程操作介面; 
UserService:使用者表操作介面,繼承了JpaRepository; 
VacationFormService:請假表操作介面,繼承了JpaRepository;

5) com.example.serviceImpl中的MiaoServiceImpl是對MiaoService介面的實現。具體細節都標註在了程式碼註釋裡,程式碼已上傳git: 
https://github.com/jichunyang19931023/ActivitiWithSpringBoot

補充: 
1.本demo的使用者登入資訊儲存在cookie裡,實際場景下可以考慮存放在Redis裡; 
2.資料庫操作使用了SpringData的JpaRepository,實現的時候只需寫一個繼承JpaRepository的類,需要給出實體類名和主鍵型別。 
 這裡寫圖片描述
3.啟動Spring Boot工程,預設會自動部署相應路徑下流程定義檔案;自動建立Activiti ProcessEngine Bean;自動註冊Activiti Service;建立Job Executor。所以我們不用像網上的大多數教程那樣配置引擎,直接使用對應的服務即可: 

這裡寫圖片描述
以上配置教程個人原創,有理解不對的地方歡迎提出建議~✿✿ヽ(°▽°)ノ✿