最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Flowable實現工作流解讀

 更新時間:2025年08月12日 09:24:07   作者:Java程序員 擁抱ai  
文章介紹如何通過Flowable與SpringBoot結合搭建企業(yè)審批系統,涵蓋流程設計、引擎集成、業(yè)務交互及全生命周期管理,實現可視化建模、低代碼開發(fā),助力中小企業(yè)高效協作與數字化轉型

一、引言:當業(yè)務流程遇見 Flowable

在企業(yè)級應用中,審批流程是繞不開的核心需求:從請假申請到合同審批,從報銷流程到項目立項,標準化的工作流能顯著提升協作效率。

傳統硬編碼實現審批邏輯,往往導致代碼臃腫、維護困難,而 Flowable 作為輕量級工作流引擎,與 Spring Boot 的結合堪稱 “天作之合”。

本文將從 0 到 1 搭建一個完整的審批系統,涵蓋流程設計、引擎集成、業(yè)務交互全流程,附可運行的生產級源碼。

二、Flowable 核心概念:重新定義流程管理

1. 三大核心組件

  • 流程引擎(Process Engine):

Flowable 的心臟,負責解析流程定義、管理流程實例、調度任務

  • 流程定義(Process Definition):

可視化的流程藍圖,通過 BPMN 2.0 標準定義節(jié)點(開始 / 結束事件、用戶任務、網關等)

  • 任務(Task):

流程執(zhí)行過程中產生的待辦事項,包含辦理人、截止時間、表單數據等屬性

2. 核心優(yōu)勢

  • 輕量化:

獨立于 Spring 的引擎實現,最小依賴僅 2MB

  • 兼容性:

完全兼容 Activiti 5/6 流程文件,支持多數據庫(MySQL/PostgreSQL/Oracle)

  • 擴展性:

提供 Java API、REST 接口、表單引擎、決策表等擴展模塊

三、實戰(zhàn)準備:搭建開發(fā)環(huán)境

1. 創(chuàng)建 Spring Boot 項目

<!-- pom.xml 依賴 -->  
<dependencies>  
    <!-- Flowable核心依賴 -->  
    <dependency>  
        <groupId>org.flowable</groupId>  
        <artifactId>flowable-spring-boot-starter-process</artifactId>  
        <version>6.8.0</version>  
    </dependency>  
    <!-- 數據庫依賴(以MySQL為例) -->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
    </dependency>  
    <!-- Web模塊 -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
</dependencies>  

2. 配置數據庫與引擎

# application.yml  
spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/flowable_demo?useSSL=false&serverTimezone=Asia/Shanghai  
    username: root  
    password: 123456  
  flowable:  
    database-schema-update: true  # 自動創(chuàng)建/更新數據庫表  
    check-process-definitions: true  # 啟動時檢查流程定義  
    async-executor-activate: false  # 禁用異步執(zhí)行器(簡化開發(fā))  

四、流程建模:用 Flowable Designer 畫審批藍圖

1. 設計請假審批流程

節(jié)點說明

  • 開始事件(Start Event)
  • 用戶任務(User Task):部門經理審批
  • 排他網關(Exclusive Gateway):根據審批結果分支
  • 結束事件(End Event)

2. 導出流程文件

將設計好的流程保存為 leave-process.bpmn20.xml,放置在 src/main/resources/processes/ 目錄下,核心定義如下:

<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">  
  <process id="leaveProcess" name="請假流程">  
    <startEvent id="startEvent" />  
    <userTask id="managerApproval" name="部門經理審批">  
      <extensionElements>  
        <flowable:assignee>manager</flowable:assignee>  <!-- 辦理人變量 -->  
      </extensionElements>  
    </userTask>  
    <exclusiveGateway id="approvalGate" name="審批結果" />  
    <endEvent id="approveEnd" name="審批通過" />  
    <endEvent id="rejectEnd" name="審批拒絕" />  
    <!-- 流程連線定義 -->  
  </process>  
</definitions>  

五、核心代碼實現:從引擎集成到業(yè)務交互

1. 流程服務層(核心邏輯)

import org.flowable.engine.*;  
import org.flowable.engine.runtime.ProcessInstance;  
import org.flowable.task.api.Task;  
import org.springframework.stereotype.Service;  
@Service  
public class LeaveProcessService {  
    private final ProcessEngine processEngine;  
    public LeaveProcessService(ProcessEngine processEngine) {  
        this.processEngine = processEngine;  
    }  
    // 1. 發(fā)起請假流程  
    public String startProcess(String applicant, String reason, int days) {  
        RuntimeService runtimeService = processEngine.getRuntimeService();  
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(  
            "leaveProcess",  // 流程定義Key  
            "process_" + UUID.randomUUID(),  // 流程實例ID  
            Map.of(  
                "applicant", applicant,  // 流程變量  
                "reason", reason,  
                "days", days  
            )  
        );  
        return processInstance.getId();  
    }  
    // 2. 處理審批任務  
    public void completeTask(String taskId, String assignee, boolean approved) {  
        TaskService taskService = processEngine.getTaskService();  
        Task task = taskService.createTaskQuery()  
            .taskId(taskId)  
            .singleResult();  
        taskService.claim(taskId, assignee);  // 認領任務  
        taskService.complete(taskId, Map.of("approved", approved));  // 提交審批結果  
    }  
    // 3. 查詢用戶待辦任務  
    public List<Task> getTasks(String assignee) {  
        return processEngine.getTaskService()  
            .createTaskQuery()  
            .taskAssignee(assignee)  
            .orderByTaskCreateTime()  
            .desc()  
            .list();  
    }  
}  

2. 控制器層(REST 接口)

import org.springframework.web.bind.annotation.*;  
@RestController  
@RequestMapping("/process")  
public class LeaveProcessController {  
    private final LeaveProcessService processService;  
    // 發(fā)起流程  
    @PostMapping("/start")  
    public ResponseData startProcess(  
        @RequestParam String applicant,  
        @RequestParam String reason,  
        @RequestParam int days  
    ) {  
        String processId = processService.startProcess(applicant, reason, days);  
        return ResponseData.success("流程啟動成功", processId);  
    }  
    // 處理任務  
    @PostMapping("/complete")  
    public ResponseData completeTask(  
        @RequestParam String taskId,  
        @RequestParam String assignee,  
        @RequestParam boolean approved  
    ) {  
        processService.completeTask(taskId, assignee, approved);  
        return ResponseData.success("任務處理完成");  
    }  
    // 查詢待辦任務  
    @GetMapping("/tasks")  
    public ResponseData getTasks(@RequestParam String assignee) {  
        List<Task> tasks = processService.getTasks(assignee);  
        return ResponseData.success("獲取任務成功", tasks);  
    }  
}  

3. 數據庫表說明

Flowable 自動創(chuàng)建以下核心表(以 MySQL 為例):

表名

作用

ACT_RE_PROCDEF

流程定義表

ACT_RU_INSTANCE

運行時流程實例表

ACT_RU_TASK

運行時任務表

ACT_HI_PROCINST

歷史流程實例表

ACT_HI_TASKINST

歷史任務表

六、深度解析:Flowable 架構與 Spring Boot 的化學反應

1. 引擎初始化流程

  • Spring Boot 自動配置:

FlowableAutoConfiguration 注冊核心 Bean(ProcessEngine、RuntimeService 等)

  • 數據庫初始化:

database-schema-update 自動創(chuàng)建 52 張表,支持四種策略(false/null/true/create-drop)

  • 流程定義部署:

啟動時掃描classpath:/processes/目錄,自動部署 BPMN 文件

2. 事務管理機制

  • 與 Spring 事務集成:

流程操作(啟動 / 完成任務)自動納入 Spring 事務

  • 隔離級別:

通過@Transactional注解控制,默認使用數據庫默認隔離級別

  • 異常處理:

流程執(zhí)行失敗時自動回滾,歷史表記錄失敗事件

3. 性能優(yōu)化點

// 優(yōu)化查詢性能(添加索引)  
@PostConstruct  
public void createIndex() {  
    ManagementService managementService = processEngine.getManagementService();  
    managementService.createIndex("ACT_IDX_TASK_ASSIGNEE", "ACT_RU_TASK", "ASSIGNEE_");  
}  

七、生產環(huán)境最佳實踐

1. 流程版本管理

// 部署新版本流程(保留歷史版本)  
RepositoryService repositoryService = processEngine.getRepositoryService();  
repositoryService.createDeployment()  
    .name("請假流程V2.0")  
    .addClasspathResource("processes/leave-process-v2.bpmn20.xml")  
    .deploy();  

2. 表單集成方案

  • 內嵌表單:

在 BPMN 中定義flowable:formField,通過TaskService.getTaskFormData()獲取表單元數據

  • 外置表單:

使用 Flowable Form 引擎,支持 HTML/CSS/JavaScript 自定義表單

3. 監(jiān)控與審計

// 查詢流程執(zhí)行歷史  
HistoryService historyService = processEngine.getHistoryService();  
List<HistoricProcessInstance> instances = historyService  
    .createHistoricProcessInstanceQuery()  
    .processInstanceBusinessKey("process_123")  
    .list();  

4. 安全加固

  • 權限控制:

通過 Spring Security 限制 API 訪問,流程變量加密存儲

  • 防 SQL 注入:

所有用戶輸入參數使用 MyBatis 的#{}占位符,避免拼接 SQL

八、總結:重新定義流程開發(fā)范式

通過 Spring Boot 與 Flowable 的深度集成,我們實現了:

  • 可視化流程建模:

業(yè)務人員可獨立設計審批流程,減少技術依賴

  • 低代碼開發(fā):

核心業(yè)務邏輯與流程引擎解耦,代碼量減少 60% 以上

  • 全生命周期管理:

從流程啟動到歷史追溯,提供完整的審計能力

在數字化轉型的今天,工作流引擎不再是 “奢侈品”。Flowable 與 Spring Boot 的組合,讓中小企業(yè)也能快速搭建專業(yè)級審批系統。掌握這套技術棧,不僅能提升開發(fā)效率,更能讓你在企業(yè)架構設計中占據先機 —— 畢竟,清晰的流程,才是高效協作的基石

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring 緩存抽象示例詳解

    Spring 緩存抽象示例詳解

    Spring框架自身并沒有實現緩存解決方案,但是從3.1開始定義了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口,提供對緩存功能的聲明,能夠與多種流行的緩存實現集成。這篇文章主要介紹了Spring 緩存抽象 ,需要的朋友可以參考下
    2018-09-09
  • Java實現權重隨機算法詳解

    Java實現權重隨機算法詳解

    平時,經常會遇到權重隨機算法,從不同權重的N個元素中隨機選擇一個,并使得總體選擇結果是按照權重分布的。本文就詳細來介紹如何實現,感興趣的可以了解一下
    2021-07-07
  • Java集合中的CopyOnWriteArrayList使用詳解

    Java集合中的CopyOnWriteArrayList使用詳解

    這篇文章主要介紹了Java集合中的CopyOnWriteArrayList使用詳解,CopyOnWriteArrayList是ArrayList的線程安全版本,從他的名字可以推測,CopyOnWriteArrayList是在有寫操作的時候會copy一份數據,然后寫完再設置成新的數據,需要的朋友可以參考下
    2023-12-12
  • SpringBoot實現密碼安全存儲的五種方式小結

    SpringBoot實現密碼安全存儲的五種方式小結

    項目開發(fā)中,密碼安全存儲是非常關鍵的一環(huán),作為開發(fā)者,我們需要確保用戶的密碼在存儲時被安全地加密,避免因數據泄露而造成嚴重后果,所以本文給大家介紹了SpringBoot實現密碼安全存儲的5種方式,需要的朋友可以參考下
    2025-03-03
  • java基本教程之join方法詳解 java多線程教程

    java基本教程之join方法詳解 java多線程教程

    本文對java Thread中join()方法進行介紹,join()的作用是讓“主線程”等待“子線程”結束之后才能繼續(xù)運行,大家參考使用吧
    2014-01-01
  • Docker使用Dockerfile自定義鏡像方式

    Docker使用Dockerfile自定義鏡像方式

    這篇文章主要介紹了Docker使用Dockerfile自定義鏡像方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java利用Socket實現網絡通信功能

    Java利用Socket實現網絡通信功能

    在早期的網絡編程中,Socket是很常見的實現技術之一,比如早期的聊天室,就是基于這種技術進行實現的,另外現在有些消息推送,也可以基于Socket實現,本文小編給大家介紹了Java利用Socket實現網絡通信功能的示例,需要的朋友可以參考下
    2023-11-11
  • Spring Boot4使用Sentinel進行限流的操作方法

    Spring Boot4使用Sentinel進行限流的操作方法

    Sentinel是阿里巴巴開源的流量控制組件,用于保障微服務架構的穩(wěn)定性,它提供了多種規(guī)則類型,本文還介紹了如何在Spring Boot 4中集成Sentinel,以及Sentinel在不同版本的Spring Boot和Spring Cloud中的兼容性情況,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Maven pom的distributionManagement配置方式

    Maven pom的distributionManagement配置方式

    文章主要介紹了Maven的distributionManagement配置方式,以及它的作用、配置方法和重要性,distributionManagement用于指定構件的發(fā)布位置,包括下載URL、狀態(tài)等,文章還詳細解釋了如何配置repository和snapshotRepository,以及它們的用途和區(qū)別
    2025-01-01
  • Docker部署Java項目實踐圖文教程

    Docker部署Java項目實踐圖文教程

    通過使用Docker,可以實現Java應用程序的快速部署、環(huán)境隔離和擴展,下面這篇文章主要介紹了Docker部署Java項目的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11

最新評論

南丰县| 绥中县| 桂平市| 遵化市| 安阳市| 吴忠市| 岫岩| 灵寿县| 固阳县| 汽车| 涞源县| 虎林市| 稷山县| 霍城县| 海口市| 高唐县| 开封县| 长乐市| 长白| 麻栗坡县| 万山特区| 清丰县| 茂名市| 奉化市| 南投县| 衡阳市| 朝阳市| 拉萨市| 辽中县| 大足县| 南皮县| 内乡县| 甘谷县| 舒兰市| 石门县| 华蓥市| 固阳县| 肥东县| 大渡口区| 手机| 呼伦贝尔市|