springBoot集成Activiti6
數(shù)據(jù)庫:mysql
IDE:Spring Tool Suite
build工具:Maven
項(xiàng)目版本:springBoot1.5.10 + JDK1.8 + Maven3.0.5
(之前用的是2.0.0版本的springBoot,集成activiti6后啟動(dòng)一直報(bào)錯(cuò),最后發(fā)現(xiàn)是版本問題,改為1.5.10就可以了,迷之崩潰o(╥﹏╥)o)
一.構(gòu)建springBoot
1.創(chuàng)建項(xiàng)目
(1)使用idea創(chuàng)建springboot項(xiàng)目很快,可參考如下鏈接:
https://www.cnblogs.com/winner-0715/p/6666302.html
(2)使用eclipse安裝STS插件的方式,參考鏈接:
https://blog.csdn.net/clementad/article/details/51334064
(可能我的eclipse比較調(diào)皮,STS插件安裝一直沒配置成功,so我直接下載了STS)
(3)STS下載地址:
http://spring.io/tools/sts/all
使用STS創(chuàng)建項(xiàng)目:
新建項(xiàng)目–選擇Spring Boot下的Spring Starter Project–Next
選擇SpringBoot的版本:
創(chuàng)建成功后的目錄結(jié)構(gòu):
給pom.xml添加以下依賴:
2.運(yùn)行項(xiàng)目
找到整個(gè)項(xiàng)目的入口類:MiaoApplication
這個(gè)類有一個(gè)@SpringBootApplication注解,這是整個(gè)Spring Boot的核心注解,它的目的就是開啟Spring Boot的自動(dòng)配置。需要在這個(gè)類上再添加一個(gè)@RestController注解,使之變?yōu)橐粋€(gè)Controller,然后里邊提供一個(gè)地址轉(zhuǎn)換方法,如下:
然后運(yùn)行項(xiàng)目,控制臺(tái)沒有報(bào)錯(cuò)信息就說明成功了,在瀏覽器上可以直接訪問:
二.Activiti6安裝運(yùn)行
1.下載和安裝Activiti6
鏈接: https://pan.baidu.com/s/1livSJdUm3doUzBZI5AKJWA
密碼: 2qza
解壓后發(fā)現(xiàn)一共有三個(gè)子目錄:database,libs,wars,各個(gè)目錄的作用描述如下:
2.使用tomcat配置與運(yùn)行
wars目錄下的三個(gè)war包默認(rèn)使用的是h2內(nèi)存數(shù)據(jù)庫,重啟服務(wù)器數(shù)據(jù)就會(huì)消失。將3個(gè)war包復(fù)制到tomcat的webapps的目錄下,更改tomcat的server.xml文件的Context 為:
<Context docBase="F:\apache-tomcat-7.0.59\webapps\activiti-app.war" path="/" reloadable="true"/>然后雙擊bin目錄下的startup.bat文件啟動(dòng)tomcat,打開瀏覽器即可訪問:
(用戶名:admin;密碼:test)
**PS:**如果你的startup.bat雙擊后自動(dòng)關(guān)閉了,有可能和我一樣是java.lang.OutOfMemoryError異常,需要在bin/catalina.bat文件中找到以下一行:
在這行的上面添加:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m重新運(yùn)行startup.bat即可。
三.Activiti6的使用
Activiti官方發(fā)布的activiti-app可以說是一個(gè)較為完善的樣例,可以通過它來了解Activiti的大部分功能。
登錄成功后,可以看到有三個(gè)不同的模塊:
下面我們以請(qǐng)假為例,定義一個(gè)工作流程。我們知道,請(qǐng)假流程中涉及到的人員有員工和主管,那么首先需要新建這兩種類型的用戶,之后定義請(qǐng)假流程。
1.新建用戶
點(diǎn)擊Idennity management,進(jìn)入U(xiǎn)sers模塊,點(diǎn)擊“Create user”按鈕新建需要請(qǐng)假的員工:
2.定義流程
點(diǎn)擊Kickstart app,進(jìn)入Processes,點(diǎn)擊“Create Process”創(chuàng)建流程。
流程創(chuàng)建完畢會(huì)自動(dòng)進(jìn)入流程編輯界面,會(huì)有提示告訴你怎么用,超貼心~
通過鼠標(biāo)拖拉,即可完成一個(gè)流程的定義:
我們定義了一個(gè)開始事件和一個(gè)結(jié)束事件以及兩個(gè)用戶任務(wù),我們需要把用戶任務(wù)分配給對(duì)應(yīng)的人員。
點(diǎn)擊第一個(gè)用戶任務(wù)“提出請(qǐng)假申請(qǐng)”,修改它的“Assignment”屬性,將當(dāng)前任務(wù)分配給Employee:
同樣,需要把第二個(gè)用戶任務(wù)分配給manager。任務(wù)分配成功后,點(diǎn)擊左上角的保存按鈕保存當(dāng)前流程。
3.發(fā)布流程
在activiti-app中,一個(gè)App可以包含多個(gè)流程模型,因此在發(fā)布流程前,需要新建一個(gè)App并設(shè)置它的流程模型。
點(diǎn)擊Apps菜單下的“Create App”按鈕,創(chuàng)建App:
創(chuàng)建完成后,將之前創(chuàng)建的流程綁定到該App上,之后發(fā)布該App:
發(fā)布成功后,使用Employee賬號(hào)登錄,可以看到發(fā)布成功的HR App,進(jìn)入該App,點(diǎn)擊Processes菜單,可以看到“Start a process”按鈕,點(diǎn)擊后即可啟動(dòng)一個(gè)請(qǐng)假流程。
啟動(dòng)后就由employee用戶完成第一個(gè)請(qǐng)假申請(qǐng):
之后可登錄manager用戶進(jìn)行審核操作,同樣點(diǎn)擊HR App,進(jìn)入后點(diǎn)擊Processes菜單,以同樣方式操作完成任務(wù)后,該流程結(jié)束。
四.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
記得新建一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫:spring-boot-activiti~
2.在pom.xml中添加Activiti6的依賴
前端使用了thymeleaf模板進(jìn)行展示,因此也需要引入它的依賴:
<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.在資源目錄下創(chuàng)建processes目錄
用于保存.bpmn后綴的流程圖,這個(gè)目錄名千萬不要手抖打錯(cuò)了,相信我,程序一定會(huì)報(bào)錯(cuò)的~
4.安裝Activiti插件
https://blog.csdn.net/qq_33547950/article/details/54926435
5.在processes文件下新建bpmn文件
6.使用Activiti插件設(shè)計(jì)流程圖
需要在IDE里調(diào)出properties面板配置參數(shù):
1).General配置Id和文字,注意Id不能重復(fù);
2)Main config里面配置當(dāng)前任務(wù)的代理人Assignee;
3)Candidate users可以配置當(dāng)前任務(wù)的候選人組,具體應(yīng)用場(chǎng)景:
當(dāng)審核者有兩個(gè)或多個(gè)以上,請(qǐng)假申請(qǐng)?zhí)峤坏剿麄兪稚虾?#xff0c;有一個(gè)人認(rèn)領(lǐng)了該任務(wù),即代表申請(qǐng)被審批通過,這種情況下就需要使用候選人組配置。
對(duì)于有兩個(gè)出口連線的任務(wù),我們通過設(shè)置連線flow的流程變量的方式來自動(dòng)控制流程的流轉(zhuǎn):
7.編寫流程代碼
說明:
com.example.MiaoApplication包含了當(dāng)前demo的主要功能:
登錄;退出;添加請(qǐng)假單;放棄請(qǐng)假;申請(qǐng)請(qǐng)假;審核請(qǐng)假;獲取請(qǐng)假狀態(tài);獲取請(qǐng)假流程。
com.example.controller.MiaoController包含了三個(gè)頁面請(qǐng)求,分別為:
申請(qǐng)人主頁面,審核人主頁面,請(qǐng)假單填寫頁面;
com.example.entity包含了兩個(gè)表:
User表:用于存放當(dāng)前用戶,登錄驗(yàn)證之前,需要手動(dòng)在該表內(nèi)加入信息,示例如下(type為1代表申請(qǐng)人,2代表審核人):
VacationForm表:用于存放請(qǐng)假信息;
com.example.service包含了三個(gè)service:
MiaoService:業(yè)務(wù)流程操作接口;
UserService:用戶表操作接口,繼承了JpaRepository;
VacationFormService:請(qǐng)假表操作接口,繼承了JpaRepository;
com.example.serviceImpl中的MiaoServiceImpl是對(duì)MiaoService接口的實(shí)現(xiàn)。具體細(xì)節(jié)都標(biāo)注在了代碼注釋里,代碼已上傳git:
https://github.com/jichunyang19931023/ActivitiWithSpringBoot
補(bǔ)充:
1.本demo的用戶登錄信息存儲(chǔ)在cookie里,實(shí)際場(chǎng)景下可以考慮存放在Redis里;
2.數(shù)據(jù)庫操作使用了SpringData的JpaRepository,實(shí)現(xiàn)的時(shí)候只需寫一個(gè)繼承JpaRepository的類,需要給出實(shí)體類名和主鍵類型。
3.啟動(dòng)Spring Boot工程,默認(rèn)會(huì)自動(dòng)部署相應(yīng)路徑下流程定義文件;自動(dòng)創(chuàng)建Activiti ProcessEngine Bean;自動(dòng)注冊(cè)Activiti Service;創(chuàng)建Job Executor。所以我們不用像網(wǎng)上的大多數(shù)教程那樣配置引擎,直接使用對(duì)應(yīng)的服務(wù)即可:
以上配置教程個(gè)人原創(chuàng),有理解不對(duì)的地方歡迎提出建議~??ヽ(°▽°)ノ?
歡迎關(guān)注我的公眾號(hào),用講故事的方式學(xué)技術(shù)。
這里有腦洞大開的奇葩故事,也有溫暖文藝的心靈感悟。
技術(shù)知識(shí),也可以很有趣。
總結(jié)
以上是生活随笔為你收集整理的springBoot集成Activiti6的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 定时任务框架APSched
- 下一篇: Android系统架构开篇