開發與維運

Spring boot整合Activiti7

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來關閉流程文件檢查.

1.png

Activiti BPMN visualizer: 安裝後打開*.bpmn20.xml文件,右鍵選擇"View BPMN(Activiti) Diagram"可打開流程圖編輯頁,效果如下圖

2.png

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:完成指定任務

說明

  1. 流程圖配置中assignee表示指定的用戶
  2. 由於實體中包含一些運行時內容不便於序列化所以返回時去掉了一些屬性

地址: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

https://blog.csdn.net/qq_40887780/article/details/83588130

https://www.cnblogs.com/liaojie970/p/8857710.html

Leave a Reply

Your email address will not be published. Required fields are marked *