一、Activiti基本概念
流程定義:就是流程圖(bpmn文件)
流程實例:流程定義的每個具體實現
流程定義與流程實例的關係就像類和對象的關係,一個類可以有多個對象,一個流程定義可以有多個流程實例。
bpmn:流程圖,下圖就是一個bpmn文件生成的圖片
二、Acitiviti插件的安裝以及創建流程定義(idea中)
1、idea中工作流插件的安裝
兩種安裝方式:通過idea的Plugins安裝actiBPM插件(需要連接外網)或者直接在idea官網直接下載然後導入。
1.1、在idea的Plugins中下載(若一直無法下載,則通過第二種方法下載):
1.2、登錄idea插件官網搜索下載:http://plugins.jetbrains.com/,然後idea導入
2、idea中創建流程定義(也就是流程圖)
然後就可以畫圖了,但是畫圖之後,沒有連接圖標怎麼辦呢?
把鼠標放在開頭的那個圖標上,此時光標的形狀改變了, 拖到另一個上面,連接成功了。
怎麼連接成功的呢? 把鼠標放到圖標的正中心,然後會看到光標變成了“扇子類型”的樣子(黑白相間)。只要看到變成這個樣子,就可以拖動到另一個圖標中,進行連接了
畫完圖後,但是並沒有生成png圖片,這個時候重命名剛纔創建的文件,把後綴改成xml,然後右鍵
然後保存到與剛纔創建文件的一個文件夾內就可以了
保存圖片後,若發現圖片中文亂碼,解決方法:
找到IDEA的安裝目錄,找到bin目錄,比如我的路徑:D:\JetBrains\IntelliJ IDEA 2017.3\bin,找到這兩個文件
具體要修改哪個文件,由你安裝的IDEA的版本來決定,如果你安裝了64位版本的IDEA,那麼就修改
這個文件,反之亦然,兩個都修改也可以,
具體修改的方法是在文件後面追加一條命令: -Dfile.encoding=UTF-8
一定注意,不要有空格,否則重啓IDEA時會打不開,然後 重啓IDEA,把原來的png圖片刪掉,再重新生成,即可解決亂碼問題
解決問題後,把xml文件重新改成bpmn格式,和png圖片一起壓縮成zip包進行部署。
- SpringBoot集成Activiti
3.1、添加activiti依賴
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta2</version>
</dependency>
3.2添加 SpringSecurity 安全框架整合配置
因爲 Activiti7 與 SpringBoot 整合後,默認情況下,集成了 SpringSecurity 安全框架,這樣我們就要去 準備 SpringSecurity 整合進來的相關用戶權限配置信息。
可以查看一下整合 SpringBoot 的依賴包,發現同時也將 SpringSecurity 的依賴包也添加進項目中了,
如下:
3.3 添加 SecurityUtil 類
這個類可以從我們下載的 Activiti7 官方提供的 Example 中找到(https://github.com/Activiti/activiti-examples)。
爲了能夠快速實現 SpringSecurity 安全框架的配置,所添加的一個組件。
3.4 添加 DemoApplicationConfig 類
在 Activiti7 官方下載的 Example 中找到 DemoApplicationConfig 類,它的作用是爲了實現 SpringSecurity 框架的用戶權限的配置,這樣我們就可以在系統中使用用戶權限信息。本次項目中基 本是在文件中定義出來的用戶信息,當然也可以是數據庫中查詢的用戶權限信息。
3.5 使用 SpringBoot 整合 Junit 方式測試新特性
通過上面的類,我們可以實現 SpringBoot 與 Junit 整合測試 Activiti7 所需的各種 API,之後我們就可以實現各種測試了。
老版本的Activiti使用ProcessEngineConfiguration、ProcessEngine、Service接口來實現對流程定義的部署,但是與springboot集成的版本只有兩個操作類ProcessRuntime、TaskRuntime,這兩個來負責流程定義的部署和操作。
ProcessEngineConfiguration類:主要作用是加載activiti.cfg.xml配置文件;
ProcessEngine類:幫助我們快速得到各個Service接口,並且可以生成activiti的工作環境(25張表的生成);
Service接口(RepositoryService、RuntimeService、TaskService、HistoryService):可以快速實現對25張表的操作。
3.6查看流程定義信息
通過 ProcessRuntime 的方法,我們可以查看已經部署的流程定義信息。通過加入 Pageable.of()方法可以實現分頁查詢效果。
3.7啓動流程實例
現在要啓動流程實例,我們可以使用 ProcessRuntime 的 start()方法就可以實現流程實例的啓動
3.8查詢並完成任務
使用 TaskRuntime 接口的 tasks()方法實現任務的查詢。
使用 TaskRuntime 接口的 claim()方法實現任務拾取。
使用 TaskRuntime 接口的 complete()方法實現任務的完成。