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.mzph.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;今天就给大家介…