Springboot 集成 Flowable 6.8.0

1. 創建 Spring Boot 項目

通過 Spring Initializr(https://start.spring.io/ )創建一個基礎的 Spring Boot 項目,添加以下依賴:

  • Spring Web
  • Spring Data JPA
  • MySQL Driver
  • Lombok(可選,用于簡化代碼)

2. 添加 Flowable 依賴

pom.xml 中添加 Flowable 相關依賴:

<dependencies><!-- Spring Boot Starter for Flowable --><dependency><groupId>org.flowable</groupId><!--引入flowable基礎功能 自動創建46張表--><artifactId>flowable-spring-boot-starter-basic</artifactId><!--引入flowable所有功能 自動創建79張表-->
<!--            <artifactId>flowable-spring-boot-starter</artifactId>--><!-- 根據需要選擇版本 --><version>6.8.0</version></dependency><!-- MySQL Driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!-- Spring Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

3. 配置 MySQL 數據庫連接

application.propertiesapplication.yml 中配置 MySQL 數據庫連接信息。以下是 application.yml 的示例:

server:port: 8080
spring:datasource:driverClassName: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/flowable?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=trueusername: rootpassword: xxxx

4. 完整配置 Flowable

application.yml 中添加完整的 Flowable 相關配置:

flowable:# 數據庫模式更新策略,可選值:false, true, create-drop, drop-create,生產環境建議falsedatabase-schema-update: trueactivity-font-name: 宋體label-font-name: 宋體annotation-font-name: 宋體process:# 流程定義緩存中保存流程定義的最大數量。默認值為-1(緩存所有流程定義)。definition-cache-limit: -1# 禁用異步執行器,開發和測試階段可這樣配置async-executor-activate: false# 歷史數據級別,可選值:none, activity, audit, fullhistory-level: full# 是否自動檢查并部署流程文件,設置為false需要手動部署流程文件check-process-definitions: true

flowable.history-level 配置項用于指定 Flowable 工作流引擎的歷史數據記錄級別。不同的歷史數據級別決定了 Flowable 在流程執行過程中記錄哪些歷史信息,這對于流程監控、審計和分析等操作非常重要。

  • none
    flowable.history-level=none 時,Flowable 工作流引擎不會記錄任何歷史數據。也就是說,在流程執行過程中,不會保存流程實例、任務、活動等相關的歷史信息。這種配置適用于對歷史數據沒有需求,只關注流程的實時執行,并且希望減少數據庫存儲壓力和提高性能的場景。例如,一些臨時性的、簡單的流程,不需要對執行過程進行追溯和分析。

  • activity
    若設置 flowable.history-level=activity,Flowable 會記錄流程活動的基本歷史信息。具體來說,會記錄每個流程實例中活動(如任務、網關等)的開始和結束時間,以及活動的狀態信息。但不會記錄流程變量、任務的詳細信息(如任務的分配、完成時間等)。這種配置適用于只需要了解流程活動的大致執行情況,而不需要詳細的任務和變量信息的場景。例如,用于監控流程的整體執行進度,查看哪些活動已經完成,哪些還在進行中。

  • audit
    當配置為 flowable.history-level=audit 時,Flowable 會記錄更詳細的歷史信息,用于審計目的。除了記錄活動的開始和結束時間外,還會記錄任務的分配信息、任務的完成時間、流程變量的更新情況等。這些信息可以幫助管理員或審計人員了解流程的執行過程,追蹤任務的處理情況和變量的變化。例如,在一個請假流程中,可以查看每個審批任務是由誰處理的,處理時間是什么時候,以及請假天數等變量在流程執行過程中是否有修改。

  • full
    設置 flowable.history-level=full 會記錄最完整的歷史數據。除了包含 audit 級別的信息外,還會記錄更多的細節,如活動的所有事件(如活動的創建、取消等)、任務的注釋、流程實例的啟動和結束原因等。這種配置適用于需要對流程進行全面追溯和分析的場景,例如進行流程優化、合規性檢查等。通過完整的歷史數據,可以深入了解流程的執行細節,發現潛在的問題和瓶頸。。

5. 創建 Flowable 流程定義文件

src/main/resources/processes 目錄下創建 BPMN 流程定義文件,例如 leave-request.bpmn20.xml。以下是一個簡單的請假流程示例:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"xmlns:flowable="http://flowable.org/bpmn"id="Definitions_1"targetNamespace="http://www.flowable.org/processdef"><process id="leaveRequestProcess" name="Leave Request Process" isExecutable="true"><startEvent id="startEvent1"></startEvent><userTask id="approveTask" name="Approve Leave Request" flowable:assignee="manager"></userTask><endEvent id="endEvent1"></endEvent><sequenceFlow id="flow1" sourceRef="startEvent1" targetRef="approveTask"></sequenceFlow><sequenceFlow id="flow2" sourceRef="approveTask" targetRef="endEvent1"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_1"><bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"><omgdc:Bounds height="36.0" width="36.0" x="173.0" y="102.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="approveTask" id="BPMNShape_approveTask"><omgdc:Bounds height="80.0" width="100.0" x="325.0" y="78.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="endEvent1" id="BPMNShape_endEvent1"><omgdc:Bounds height="36.0" width="36.0" x="501.0" y="102.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"><omgdi:waypoint x="209.0" y="120.0"></omgdi:waypoint><omgdi:waypoint x="325.0" y="118.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"><omgdi:waypoint x="425.0" y="118.0"></omgdi:waypoint><omgdi:waypoint x="501.0" y="120.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

6. 創建服務類啟動流程實例

創建一個服務類來啟動流程實例:

import org.flowable.engine.RuntimeService;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;@Service
public class LeaveRequestService {private final RuntimeService runtimeService;public LeaveRequestService(RuntimeService runtimeService) {this.runtimeService = runtimeService;}public String startLeaveRequestProcess() {Map<String, Object> variables = new HashMap<>();variables.put("employee", "John Doe");variables.put("leaveDays", 5);return runtimeService.startProcessInstanceByKey("leaveRequestProcess", variables).getId();}
}

7. 創建控制器測試流程啟動

創建一個控制器來測試流程啟動:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LeaveRequestController {@Autowiredprivate LeaveRequestService leaveRequestService;@GetMapping("/start-leave-request")public String startLeaveRequest() {return "Process instance started with ID: " + leaveRequestService.startLeaveRequestProcess();}
}

8. 啟動項目

啟動 Spring Boot 項目后, leave-request.bpmn20.xml文件會自動部署,可以在act_re_procdefact_re_deployment表中查看流程定義的相關信息。
在這里插入圖片描述
在這里插入圖片描述

訪問 http://localhost:8080/startLeaveRequest 來啟動請假流程實例。可以在act_ru_task表中查看正在運行的流程實例

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75539.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《TCP/IP網絡編程》學習筆記 | Chapter 22:重疊 I/O 模型

《TCP/IP網絡編程》學習筆記 | Chapter 22&#xff1a;重疊 I/O 模型 《TCP/IP網絡編程》學習筆記 | Chapter 22&#xff1a;重疊 I/O 模型理解重疊 I/O 模型重疊 I/O本章討論的重疊 I/O 的重點不在于 I/O 創建重疊 I/O 套接字執行重疊 I/O 的 WSASend 函數進行重疊 I/O 的 WSA…

搭建Redis哨兵集群

停掉現有的redis集群 因為這篇文章我是在 搭建完redis主從集群之后寫的&#xff0c;如果要是沒有搭建過這些&#xff0c;可以直接略過。要是從我上一篇 搭建redis主從集群過來的&#xff0c;可以執行下。 docker compose down 查找下redis相關進程 ps -ef | grep redis 可以看…

MySQL中,聚集索引和非聚集索引到底有什么區別?

文章目錄 1. 數據存儲方式2. 索引結構3. 查詢效率4. 索引數量5. 適用場景6. 示例說明7. 總結 在MySQL中&#xff0c;聚集索引和非聚集索引&#xff08;也稱二級索引&#xff09;的區別主要體現在數據存儲方式、索引結構和查詢效率等方面。以下是詳細對比&#xff1a; 1. 數據存…

看 MySQL InnoDB 和 BoltDB 的事務實現

BoltDB 事務實現 BoltDB 支持多讀單寫方式的并發級別 事務操作會鎖表 它的 MVCC 為 2 個版本&#xff0c;當前版本和正在寫的版本 多讀&#xff1a;可以并發讀當前版本 單寫&#xff08;串行寫&#xff09;&#xff1a;寫時拷貝當前 B 樹&#xff0c;構建新 B 樹&#xff…

08_JavaScript數據操作方法_數組

目錄 一、創建一個數組 1.1 數組如何創建 字面量創建 構造函數創建 1.2 數組的長度 數組名.length 1.3 數組的索引 1.4 數組如何循環遍歷 for 循環遍歷 for in for of 二、數組的常用方法 &#xff08;重點 面試&#xff09; push 方法 unshift 方法 pop shif…

2025.3.25總結

工作&#xff1a;這兩天工作都沒啥產出&#xff0c;主要是工作狀態不太好&#xff0c;周日晚上兩點睡&#xff0c;周一晚上一點睡。熬夜傷身&#xff0c;但就是控制不住自己&#xff0c;睡前總要刷刷手機。本來想睡前看會書的&#xff0c;但這行為及其不穩定&#xff0c;抖音也…

《Python實戰進階》第33集:PyTorch 入門-動態計算圖的優勢

第33集&#xff1a;PyTorch 入門-動態計算圖的優勢 摘要 PyTorch 是一個靈活且強大的深度學習框架&#xff0c;其核心特性是動態計算圖機制。本集將帶您探索 PyTorch 的張量操作、自動求導系統以及動態計算圖的特點與優勢&#xff0c;并通過實戰案例演示如何使用 PyTorch 實現…

初識哈希表

一、題意 給定一個整數數組 nums 和一個目標值 target&#xff0c;要求你在數組中找出和為目標值的那兩個整數&#xff0c;并返回它們的數組下標。你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中同一個元素不能使用兩遍。 示例&#xff1a; 給定 nums [2, 7, …

23種設計模式-創建型模式-單例

文章目錄 簡介問題1. 確保一個類只有一個實例2. 為該實例提供全局訪問點 解決方案示例重構前&#xff1a;重構后&#xff1a; 拓展volatile 在單例模式中的雙重作用 總結 簡介 單例是一種創建型設計模式&#xff0c;它可以確保一個類只有一個實例&#xff0c;同時為該實例提供…

python裁剪nc文件數據

問題描述&#xff1a; 若干個nc文件儲存全球的1850-2014年月尺度的mrro數據(或其他數據)&#xff0c;從1850-1到2014-12一共1980個月&#xff0c;要提取出最后35年1980.1~2014.12年也就是420個月的數據。 代碼實現 def aaa(input_file,output_file,bianliang,start_index,en…

深入解析 Spring Framework 5.1.8.RELEASE 的源碼目錄結構

深入解析 Spring Framework 5.1.8.RELEASE 的源碼目錄結構 1. 引言 Spring Framework 是 Java 領域最流行的企業級開發框架之一&#xff0c;廣泛用于 Web 開發、微服務架構、數據訪問等場景。本文將深入解析 Spring Framework 5.1.8.RELEASE 的源碼目錄結構&#xff0c;幫助開…

數據清洗:基于python抽取jsonl文件數據字段

基于python抽取目錄下所有“jsonl”格式文件。遍歷文件內某個字段進行抽取并合并。 import os import json import time from tqdm import tqdm # 需要先安裝&#xff1a;pip install tqdmdef process_files():# 設置目錄路徑dir_path r"D:\daku\關鍵詞識別\1623-00000…

Windows 下使用 Docker 部署 Go 應用與 Nginx 詳細教程

一、環境準備 1. 安裝必要軟件 Docker Desktop for Windows 下載地址&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 安裝時勾選"使用 WSL 2 引擎"&#xff08;推薦&#xff09; WSL 2&#xff08;Windows Subsystem for Li…

C# .net ai Agent AI視覺應用 寫代碼 改作業 識別屏幕 標注等

C# net deepseek RAG AI開發 全流程 介紹_c# 向量處理 deepseek-CSDN博客 視覺多模態大模型 通義千問2.5-VL-72B AI大模型能看懂圖 看懂了后能干啥呢 如看懂圖 讓Agent 寫代碼 &#xff0c;改作業&#xff0c;識別屏幕 標注等等。。。 據說是目前最好的免費圖片識別框架 通…

Docker多階段構建:告別臃腫鏡像的終極方案

Docker多階段構建:告別臃腫鏡像的終極方案 你是否遇到過這樣的問題:一個簡單的應用,Docker鏡像卻高達1GB?編譯工具、臨時文件、開發依賴全被打包進去,導致鏡像臃腫且不安全。 多階段構建(Multi-stage Build) 就是為解決這一問題而生——它像搬家時“只帶必需品”,讓生…

大模型應用開發之大模型工作流程

一&#xff1a;大模型的問答工作流程 1.1: 分詞和向量化 如上圖所示&#xff0c;我們如果讓大模型去回答問題&#xff0c;首先我們會輸入一些文字給到大模型&#xff0c;大模型本質上是個數學模型&#xff0c;它是理解不了人類的整句話的&#xff0c;所以它會把我們的對應的句…

SpringMVC 請求處理

SpringMVC 請求處理深度解析&#xff1a;從原理到企業級應用實踐 一、架構演進與核心組件協同 1.1 從傳統Servlet到前端控制器模式 SpringMVC采用前端控制器架構模式&#xff0c;通過DispatcherServlet統一處理請求&#xff0c;相比傳統Servlet的分散處理方式&#xff0c;實…

12屆藍橋杯—貨物擺放

貨物擺放 題目描述 小藍有一個超大的倉庫&#xff0c;可以擺放很多貨物。 現在&#xff0c;小藍有 nn 箱貨物要擺放在倉庫&#xff0c;每箱貨物都是規則的正方體。小藍規定了長、寬、高三個互相垂直的方向&#xff0c;每箱貨物的邊都必須嚴格平行于長、寬、高。 小藍希望所…

Reactor/Epoll為什么可以高性能?

在 Reactor 模式中使用 epoll_wait 實現低 CPU 占用率的核心原理是 ?事件驅動的阻塞等待機制&#xff0c;而非忙等待。以下通過分步驟解析其工作原理和性能優勢&#xff1a; void network_thread() {int epoll_fd epoll_create1(0);epoll_event events[MAX_EVENTS];// 添加U…

批量優化與壓縮 PPT,減少 PPT 文件的大小

我們經常能夠看到有些 PPT 文檔明明沒有多少內容&#xff0c;但是卻占用了很大的空間&#xff0c;存儲和傳輸非常的不方便&#xff0c;這時候通常是因為我們插入了一些圖片/字體等資源文件&#xff0c;這些都可能會導致我們的 PPT 文檔變得非常的龐大&#xff0c;今天就給大家介…