Springboot 集成 Flowable 6.8.0

news2025/3/31 1:36:20

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.Driver
    url: jdbc:mysql://localhost:3306/flowable?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
    username: root
    password: xxxx

4. 完整配置 Flowable

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

flowable:
  # 数据库模式更新策略,可选值:false, true, create-drop, drop-create,生产环境建议false
  database-schema-update: true
  activity-font-name: 宋体
  label-font-name: 宋体
  annotation-font-name: 宋体
  process:
    # 流程定义缓存中保存流程定义的最大数量。默认值为-1(缓存所有流程定义)。
    definition-cache-limit: -1
  # 禁用异步执行器,开发和测试阶段可这样配置
  async-executor-activate: false
  # 历史数据级别,可选值:none, activity, audit, full
  history-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 {

    @Autowired
    private 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.coloradmin.cn/o/2322967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

协作机械臂需要加安全墙吗? 安全墙 光栅 干涉区

安全墙是什么 文章目录 安全墙是什么简介1. 物理安全墙1.1 定义&#xff1a;1.2 作用机制&#xff1a;1.3 应用场景&#xff1a; 2. 虚拟安全墙2.2 定义&#xff1a;2.3 作用机制&#xff1a;2.3 应用场景&#xff1a; 3. 安全毛毯3.1 工作原理&#xff1a;3.2 特点3.3 应用场景…

springboot+mybatisplus

1.什么是springboot? Spring Boot是一个用于快速构建Spring应用程序的框架。它旨在帮助开发人员快速搭建Spring框架,减少配置和繁琐的工作。Spring Boot继承了原有Spring框架的优秀基因,使Spring在使用中更加方便快捷。 在Spring Boot中集成ActiveMQ,需要导入相应的starter…

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…

SICAR 标准 KUKA 机器人标准功能块说明手册

功能块名称:LSicar_Robot_KUKA_PrD 目录 1. 概述 2. 功能说明 2.1 程序控制 2.2 状态监控 2.3 报警与故障处理 2.4 驱动控制 3. 关键参数说明 4. 操作步骤指南 4.1 初始化配置 4.2 运行控制 4.3 状态监控 5. 常见故障处理 6. 注意事项 附录1:程序段索引 附录…

linux中如何修改文件的权限和拥有者所属组

目录标题 chmod指令八进制形式权限修改文件拥有者所属组的修改umask有关内容 chmod指令 chmod指令可以用来修改人员的权限其形式如下&#xff1a; u代表的是拥有者&#xff0c;g代表的是所属组&#xff0c;o代表的是其他人&#xff0c;a表示所有人&#xff0c;如果你想增加权…

掌握Linux项目自动化构建:从零入门make与Makefile

文章目录 前言&#xff1a; 一、初识自动化构建工具1.1 什么是make/Makefile&#xff1f;1.2 快速体验 二、深入理解核心机制2.1 依赖关系与依赖方法2.2 伪目标的妙用2.3 具体语法a.makefile的基本雏形b.makefile推导原则&#xff01; 三、更加具有通用型的makefile1. 变量定义…

Jenkins 配置python项目和allure

Jenkins新建项目 新建ry-api-auto-test。 添加项目描述&#xff0c;选择gitee令牌。 源码管理&#xff0c;设置仓库地址和凭证。参考我上一篇文章的链接&#xff1a;配置gitee私人令牌和凭证 构建步骤&#xff0c;因为我Jenkins部署在Windows&#xff0c;因此选择batch。…

vue3:十一、主页面布局(进入指定菜单页面,默认锁定到左侧菜单)

一、效果 直接进入home页面&#xff0c;直接展开对应的菜单项 二、具体实现 1、菜单容器增加默认选中变量 在菜单容器中将默认展开菜单default-openeds修改为默认选中菜单default-active 2、引入useRoute方法 引入该方法为了获取当前页面的路径 import { useRoute } from …

【蓝桥杯】每日练习 Day13

前言 今天做了不少题&#xff0c;但是感觉都太水了&#xff0c;深思熟虑之下主播决定拿出两道相对不那么水的题来说一下&#xff08;其实还是很水&#xff09;。 两道问题&#xff0c;一道是日期问题&#xff08;模拟&#xff09;&#xff0c;一道是区间合并问题。 日期差值 …

【Docker系列七】Docker Compose 命令详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【AI学习】Transformer 模型

1,概念 是一种基于自注意力机制(Self-Attention Mechanism)的深度学习架构,在自然语言处理、计算机视觉等多个领域都有着极为重要的应用。 2,基本结构 1)编码器(Encoder) 通常由多个相同的编码器层堆叠而成。 每个编码器层包含了多头自注意力机制、前馈神经网络以及…

大数据学习栈记——HBase操作(shell java)

本文介绍HBase在shell终端的常见操作以及如何利用java api操作HBase&#xff0c;操作系统&#xff1a;Ubuntu24.04 参考&#xff1a; https://blog.51cto.com/u_16099228/8016429 https://blog.csdn.net/m0_37739193/article/details/73618899 https://cloud.tencent.com/d…

智能制造:物联网和自动化之间的关系

工业自动化 工业自动化是机器设备或生产过程在不需要人工直接干预的情况下按预期的目标实现测量、操纵等信息处理和过程控制的统称。 在传统的工业生产过程中&#xff0c;很多环节需要人工操作&#xff0c;比如设备调试、生产监控、质量检测等。然而&#xff0c;随着工业自动化…

Axure项目实战:智慧城市APP(三)教育查询(显示与隐藏交互)

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;教育查询 主要内容&#xff1a;教育公告信息&#xff0c;小升初、初升高、高考成绩查询&#xff1b;教育公告信息为传统的信息页面&#xff0c;小升…

01 设计模式和设计原则

类设计原则&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a;实现类要职责单一开闭原则&#xff08;Open Close Principle&#xff0c;OCP&#xff09;&#xff1a;对扩展开放&#xff0c;对修改关闭里氏替换原则…

Github 2025-03-23 php开源项目日报Top10

根据Github Trendings的统计,今日(2025-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10TypeScript项目1JavaScript项目1Shell项目1Laravel: 以优雅语法简化Web开发 创建周期:4028 天开发语言:PHP协议类型:MIT LicenseSt…

AIMB-ASMB-788B(PPC-MB-620B)RAID驱动安装(笔记版)

创建RAID后安装系统时看不到磁盘信息&#xff0c;以下案例是安装windows10系统时如何安装主板RAID驱动&#xff0c;由于是笔记版不做过多介绍。 RAID驱动链接&#xff1a;https://advdownload.advantech.com.cn/productfile/Downloadfile1/1-2MAHDQD/AIMB-788_788E_RAID_AHCI_…

深度分页优化思路

深度分页优化思路 思考以下问题 查询以下SQL的流程是怎么样的呢&#xff1f; 为什么只查询10条数据需要7秒&#xff1f; # 查询时间7秒 SELECT * FROM user ORDER BY age LIMIT 1000000, 10问题分析 为什么分页查询随着翻页的深入&#xff0c;会变得越来越慢。 其实&#xff0…

K8S学习之基础五十四:jenkins新建测试流水线

jenkins新建测试流水线 新建任务 node(testak) {stage(第1步:从gitee上下载源代码) {git url: "https://gitee.com/akang007/jenkins-sample"script {build_tag sh(returnStdout: true, script: git rev-parse --short HEAD).trim()}}stage(第2步&#xff1a;基…

HarmonyOS NEXT(九) :图形渲染体系

HarmonyOS NEXT&#xff08;九&#xff09; &#xff1a;图形渲染体系 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 HarmonyOS NEXT&#xff0…