Activiti介紹
Activiti是一個輕量級的java開源BPMN 2工作流引擎.目前以升級至7.x,支持與springboot2集成.
SpringBoot配置說明
- pom.xml 增加activiti-spring-boot-starter並指定對應版本.
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> </dependency> <!-- 指定數據源--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
- java配置
activiti-spring-boot默認集成了spring security用於權限管理如需禁用security啟動類中屏蔽ActivitiSpringIdentityAutoConfiguration,再增加一個配置類即可 Application中禁用權限相關集成
package com.meijm.activiti; import org.activiti.core.common.spring.identity.config.ActivitiSpringIdentityAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(exclude = {ActivitiSpringIdentityAutoConfiguration.class}) public class ActivitiApplication { public static void main(String[] args) { SpringApplication.run(ActivitiApplication.class); } }
增加配置類ActivitiSpringIdentityAutoConfiguration,其中有三個方法在源碼中並未查詢到引用暫時不處理
package com.meijm.activiti.config; import com.google.common.collect.ImmutableList; import org.activiti.api.runtime.shared.identity.UserGroupManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.List; @Configuration public class ActivitiSpringIdentityAutoConfiguration { @Bean public UserGroupManager userGroupManager() { return new UserGroupManager() { @Override public List<String> getUserGroups(String s) { return ImmutableList.of("指定用戶歸屬組"); } @Override public List<String> getUserRoles(String s) { return null; } @Override public List<String> getGroups() { return null; } @Override public List<String> getUsers() { return null; } }; } }
完成以上配置後項目啟動時會創建基礎的數據表,不包含歷史記錄等,如需要則在配置文件中增加配置即可.配置介紹.
啟動後可能會不創建數據表,數據庫連接中增加nullCatalogMeansCurrent=true這個參數就好了,具體原因不明
spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/m-activiti?serverTimezone=UTC&nullCatalogMeansCurrent=true
工程啟動後會自動加載/resources/processes下流程圖配置文件, 支持兩種格式*.bpmn20.xml,*.bpmn
流程圖編輯IDEA插件
actiBPM: 安裝後對*.bpmn後綴的文件可以直接打開流程圖編輯視圖,效果如下,編輯保存後會在標籤中增加xmlns=""屬性,會導致自動部署失敗,可以手動刪除此屬性,也可以通過spring.activiti.check-process-definitions=false來關閉流程文件檢查.
Activiti BPMN visualizer: 安裝後打開*.bpmn20.xml文件,右鍵選擇"View BPMN(Activiti) Diagram"可打開流程圖編輯頁,效果如下圖
API說明
集成配置好之後會在系統注入以下bean,使用時增加註入即可,最基礎的是前三個bean.
名稱 | 介紹 |
RuntimeService | 執行時Service可以處理所有執行狀態的流程例項流程控制(開始,暫停,掛起等) |
TaskService | 任務Service用於管理、查詢任務,例如簽收、辦理、指派等 |
RepositoryService | 流程倉庫Service,可以管理流程倉庫例如部署刪除讀取流程資源 |
IdentitiServicec | 身份Service可以管理查詢使用者、組之間的關係 |
FormService | 表單Service用於讀取和流程、任務相關的表單資料 |
HistoryService | 歷史Service用於查詢所有的歷史資料 |
ManagementService | 引擎管理Service,和具體業務無關,主要查詢引擎配置,資料庫作業 |
DynamicBpmService | 動態bpm服務 |
例子
下面源碼中包含一個簡單的流程例子,包含兩個用戶任務,提供了controller來操作流程
/baseActiviti/start:流程啟動
/baseActiviti/taskList:查看指定用戶的任務
/baseActiviti/completeTask:完成指定任務
說明
- 流程圖配置中assignee表示指定的用戶
- 由於實體中包含一些運行時內容不便於序列化所以返回時去掉了一些屬性
地址:https://gitee.com/MeiJM/spring-cram/tree/master/activiti
參考資料
https://www.activiti.org/userguide/#springSpringBoot
https://blog.csdn.net/yang_zzu/article/details/103998671
https://www.cnblogs.com/tianguodk/p/9414363.html