什么是工作流?

概述
工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成,

BPM
BPM(Business Process Management,业务流程管理),是一套系统的管理方法论和学科。它强调以“流程”为视角来设计、执行、管理和优化企业的各种业务活动,其最终目标是提高组织效率、增强敏捷性并实现战略目标。

BPMN
BPMN(Business Process Model and Notation,业务流程模型与标记)是一套全球通用的标准图形符号和规范,由对象管理组织(OMG)维护。它是为 BPM 方法论中的“建模”阶段服务的具体工具。BPMN2.0正式版本于2011年1月3日发布,目前常见的工作流引擎如:Activiti、Flowable、Camunda都基于 BPMN 2.0 标准。

Activiti、Flowable、Camunda有什么区别?

概述

Activiti、Flowable、Camunda都是从JBPM中诞生出来,jBPM4发展了1年出现了Activiti5,Activiti5发展了几年后第一次分叉出现了Camunda,第二次分叉出现了Flowable。

Camunda
2013年:因团队对 Activiti 发展方向分歧(如商业化策略),部分核心成员(包括 Tom Baeyens)离开 Alfresco,创建 Camunda,延续 Activiti 5 代码分支,保留 PVM 架构。

Flowable
2016年:Activiti 6 开发团队因与 Salaboy 团队(主导 Activiti 7)理念不合,分叉 Activiti 6 代码创建 Flowable。移除 PVM,重构引擎内核,强化异步机制和多模型支持(BPMN/CMMN/DMN)

支持的数据库:

MySQL
Activiti 支持但未明确具体版本;Flowable 支持 5.6 和 5.7;Camunda 也支持 5.7、 8.0。

Oracle
Activiti 支持但未明确版本;Flowable 支持 10g、11g 和 12c;Camunda 支持 12c 、19c。

PostgreSQL
Activiti 支持但未明确版本;Flowable 支持 9.1、9.3、9.4、9.6 和 10.4;Camunda 支持 9.6、 10 、 11、 12、13。

SQL Server
Activiti 支持但未明确版本;Flowable 支持 2008 R2、2012、2014 和 2016;Camunda 支持2014 、 2016 、 2017、 2019。

DB2
Activiti 支持但未明确版本;Flowable 支持 9.7、10.1、10.5 和 11.1;Camunda 支持 11.1。

H2
Activiti 将其作为默认数据库支持;Flowable 和 Camunda 均支持 1.4 版本。

MariaDB
Activiti 未明确提及是否支持;Flowable 明确不支持;Camunda 支持 10.2 和 10.3 版本。

Camunda

文档

官网地址:https://camunda.com/
中文站点:http://camunda-cn.shaochenfeng.com/

Camunda Modele

Camunda Modeler 是Camunda 官方提供的一个流程设计器,用于编辑流程图以及其他模型【表单】,也就是一个流程图的绘图工具
在这里插入图片描述
Camunda BPM

Camunda BPM 是Camunda官方提供的一个业务流程管理平台,用来管理,部署的流程定义、执行任务,策略等。解压文件后,执行名为start.bat脚本,打开浏览器访问http://localhost:8080/进入欢迎页面,Camunda的管理平台。
在这里插入图片描述

核心表结构

ACT_GE_:表示流程通用数据,用于不同场景下。
ACT_RE_
:表示流程资源存储,这个前缀的表包含了流程定义和流程静态资源(图片,规则等)。
ACT_RU_:表示流程运行时。这些运行时的表,包含流程实例,任务,变量,Job等运行中的数据。 Camunda只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录, 这样运行时表的数据量最小,可以最快运行。
ACT_ID_
:表示组织用户信息,比如用户,组等。
ACT_HI_*:表示流程历史记录。这些表包含历史数据,比如历史流程实例,变量,任务等。

SpringBoot整合Camunda示例

Spring Boot 版本和Camunda版本兼容

Spring Boot 版本和Camunda版本之间不匹配,会出现各种意想不到的错误,具体版本兼容可参照官方文档
在这里插入图片描述

Demo示例

相关的pom.xml中的依赖

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mshb.workflow</groupId><artifactId>camunda-msb-demo</artifactId><version>1.0.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.camunda.bpm</groupId><artifactId>camunda-bom</artifactId><version>7.21.0</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-rest</artifactId></dependency><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.camunda.bpm</groupId><artifactId>camunda-engine-plugin-spin</artifactId></dependency><dependency><groupId>org.camunda.spin</groupId><artifactId>camunda-spin-dataformat-all</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.2</version></plugin></plugins></build></project>

配置文件信息

spring.datasource.url: jdbc:h2:file:./camunda-h2-database
camunda.bpm.admin-user:id: demopassword: demo

部署流程

通过启动类启动,访问http://localhost:8080/camunda/可登录camunda控制台界面

public void deploy() {Deployment deploy = repositoryService.createDeployment().name("发起支付流程") // 定义部署文件的名称.addClasspathResource("payment.bpmn") // 绑定需要部署的流程文件.deploy();// 部署流程
}

启动流程

public void startFlow() {// 创建流程变量集合Map<String, Object> variables = new HashMap<>();// 添加支付相关参数(类型自动推断)variables.put("amount", 2999);          // 整数类型variables.put("item", "Premium Package");// 字符串类型variables.put("approved", true);        // 布尔类型// 部署流程ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Payment-gateway", variables);if (processInstance != null) {// 部署的流程实例的相关信息System.out.println("processInstance.getId() = " + processInstance.getId());System.out.println("processInstance.getProcessDefinitionId() = " + processInstance.getProcessDefinitionId());// 验证变量已注入(可选)Map<String, Object> actualVars = runtimeService.getVariables(processInstance.getId());System.out.println("流程变量: " + actualVars);} else {System.out.println("流程启动失败");}
}

查询待办

public void queryTask() {List<Task> list = taskService.createTaskQuery().taskAssignee("demo").list();if (list != null && !list.isEmpty()) {for (Task task : list) {System.out.println("task.getId() = " + task.getId());System.out.println("task.getAssignee() = " + task.getAssignee());}}
}

完成任务

public void completeTask() {// 根据用户找到关联的TaskTask task = taskService.createTaskQuery().taskAssignee("demo").singleResult();if (task != null) {// 可更新任务属性//taskService.setAssignee(task.getId(), "new_assignee");taskService.complete(task.getId());System.out.println("任务审批完成...");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93997.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93997.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93997.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年09月计算机二级Java选择题每日一练——第四期

计算机二级中选择题是非常重要的&#xff0c;所以开始写一个每日一题的专栏。 答案及解析将在末尾公布&#xff01; 今日主题&#xff1a;面向对象特性 1、有两个类 A 和 B 的定义如下&#xff1a; class A{final int x10;public void show(){System.out.print(x " &quo…

《Nature》新文解读:电化学辅助核聚变的实验验证与机制分析

前言一篇于2025年8月发表在《Nature》期刊上的重磅研究&#xff0c;由加拿大不列颠哥伦比亚大学&#xff08;UBC&#xff09;Curtis P. Berlinguette教授领导的跨学科团队完成&#xff0c;首次在实验上证实&#xff1a;通过电化学方法向钯金属靶中加载氘&#xff0c;可显著提升…

【基础-判断】用户在长视频、短视频、直播、通话、会议、拍摄类应用等场景下,可以采用悬停适配在折叠屏半折态时,上屏进行浏览下屏进行交互操作

用户在长视频、短视频、直播、通话、会议、拍摄类应用等场景下,可以采用悬停适配在折叠屏半折态时,上屏进行浏览下屏进行交互操作。 解释如下: ✅ 1. 悬停态适配机制的核心设计 HarmonyOS 针对折叠屏半折态(悬停态)提供了分屏交互框架,其核心逻辑是: 上屏(Upper Scre…

nodejs安装后 使用npm 只能在cmd 里使用 ,但是不能在poowershell使用,只能用npm.cmd

nodejs安装后 使用npm 只能在cmd 里使用 &#xff0c;但是不能在poowershell使用&#xff0c;只能用npm.cmdnodejs版本&#xff1a;22.18.0 刚安装好nodejs&#xff0c;在 PowerShell 中无法执行 npm&#xff0c;但能执行npm.cmd&#xff0c;这通常是因为 PowerShell 的执行策略…

【链表 - LeetCode】2. 两数相加

谁都逃不掉 LeetCode &#xff01;&#xff01;哈哈哈~~~ 开刷&#xff1a;&#xff09; 2025年08月22日 题目&#xff1a;2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 知识点&#xff1a;链表 /*** Definition for singly-linked list.* struct ListNode {* in…

WG-Tools 在线开发者工具推荐:完全免费、无广告干扰、无需安装、即开即用

WG-Tools 在线开发者工具箱全面探秘: 一站式效率提升平台前言一. WG-Tools 平台介绍 &#x1f6e0;️平台概览技术架构亮点二. 功能模块详细介绍 &#x1f3af;&#x1f4dd; 文本处理工具 (Text Tools)1. JSON工具2. XML工具3. 文本对比4. 正则表达式工具5. Markdown编辑器6. …

四十二、【核心功能强化】用例管理与调试:批量删除与在线请求测试

四十二、【核心功能强化】用例管理与调试:批量删除与在线请求测试 前言 准备工作 第一部分:后端实现 1. 修改 `TestCaseViewSet` (`api/views.py`) 2. 后端 API 权限: 第二部分:前端实现 1. 更新 `api/testcase.ts` API 服务 2. 改造 `TestCaseListView.vue` (用例列表页面…

从H.264到AV1:音视频技术演进与模块化SDK架构全解析

引言 过去二十年&#xff0c;音视频技术经历了从 文件点播 → 流媒体 → 实时直播 → 互动协作 的深刻演变。早期的视频更多停留在娱乐与媒体分发层面&#xff0c;而如今&#xff0c;它已经成为数字化社会的“实时交互基座”。从 安防监控的秒级告警、工业巡检的远程操作&…

Kubernetes 调度器 详解

1. 调度器在 K8s 中的位置与核心流程API Server ←→ etcd ←→ kube-scheduler ←→ kubelet创建&#xff1a;用户提交 Pod 描述&#xff08;YAML/Helm/Operator&#xff09;。监听&#xff1a;调度器通过 Watch 机制捕获到 spec.nodeName"" 的 Pod。过滤&#xff1…

51.Seata-TCC模式

前面两种XA模式和TA模式,都是用了加锁。 TCC模式则不会加锁,性能更好。 TCC模式跟AT模式非常相似, 1.AT模式下,第一阶段直接提交事务。 2.TCC模式下,第一阶段不是提交事务,而是资源的预留冻结。 不同的是二阶段TCC通过人工编码来实现数据恢复。 需要实现三个方法 …

什么是数据分类分级?数据分类分级技术实现路径及产品推荐

什么是数据分类分级&#xff1f; 数据分类分级是指按照一定的原则、方法和标准&#xff0c;对数据进行系统化的类别划分和级别确定。具体而言&#xff0c;数据分类是依据数据的属性、特征、来源、用途等维度&#xff0c;将数据划分为不同的类别&#xff0c;如按照业务领域可分为…

深度学习——神经网络

在当今人工智能蓬勃发展的时代&#xff0c;深度学习和神经网络已经成为最受关注的技术领域之一。从智能手机的人脸识别到自动驾驶汽车的环境感知&#xff0c;从医疗影像分析到金融风险预测&#xff0c;这些技术正在深刻改变我们的生活和工作方式。本文将带您了解深度学习和神经…

uniapp image标签展示视频第一帧

?vframe/jpg/offset/1/ 加到视频后面获取第一帧图片 ?vframe/jpg/offset/1/w/400/h/300 设置宽高 ?imageView2/0/w/2000/interlace/1 设置图片分辨率 2000 // 后面的 /1/ 是第几帧 <image class"thumb" :src"videoUrl?vframe/jpg/offset/1/" mode…

前端本地模糊搜索1.0 按照匹配位置加权

需求背景 公司项目为Saas ERP系统&#xff0c;客户需要快速开单需要避免接口带来的延迟问题。所以需要将商品数据保存在本地。所以本地搜索 权重 这一套组合拳需要前端自己实现。 搜索示例 示例1&#xff1a;输入&#xff1a;"男士真皮钱包"进行模糊匹配优先匹配完全…

Linux学习-网络编程2

1.tcp可能出现粘包解决&#xff1a;要让消息之间有边界1.结束标志 \r\n2.固定长度3.协议结构体2.recv和sendrecv原型&#xff1a;ssize_t recv(int sockfd, void *buf, size_t len, int flags); 功能&#xff1a;从sockfd接收信息 参数&#xff1a;sockfd&#xff1a;要…

【普通地质学】构造运动与地质构造

名词解释走向&#xff1a;倾斜的层面与水平面的交线走向线&#xff0c;走向线两端延伸的方向即为走向&#xff1b;构造运动&#xff1a;由于地球内部动力引起的组成岩石圈物质的机械运动&#xff0c;也可称地壳运动或岩石圈运动&#xff1b;按方向分为垂直运动和水平运动&#…

基于Python的旅游推荐系统 Python+Django+Vue.js

本文项目编号 25009 &#xff0c;文末自助获取源码 \color{red}{25009&#xff0c;文末自助获取源码} 25009&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 用户功能描述1.2 管理员功能描述 二、系统录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…

基于51单片机的智能加湿器设计 温湿度水位防干烧手动自动声光报警

1 系统功能介绍 本设计实现了一种 基于 51 单片机的智能加湿器控制系统。随着现代生活水平的提高&#xff0c;人们对居住和办公环境的舒适度要求越来越高&#xff0c;空气湿度和温度的调节逐渐成为家庭和办公自动化的重要组成部分。传统加湿器仅能实现简单的加湿功能&#xff0…

开发避坑指南(31):Oracle 11g LISTAGG函数使用陷阱,缺失WITHIN子句解决方案

错误信息 Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-02000: 缺失 WITHIN 关键字查询语句 使用LISTAGG函数将多行数据合并为单行字符串&#xff0c;如下&#xff1a; selectt.order_no as orderNo,t.account_no,(select listagg(a.bank_name,,) …

【虚拟化】磁盘置备方式的性能损耗对比

【虚拟化】磁盘置备方式的性能损耗对比摘要1、定义1.1厚置备&#xff08;Thick Provisioning&#xff09;1.2厚置备延迟置零&#xff08;Thick Provisioned Lazy Zeroed&#xff09;1.3厚置备置零&#xff08;Thick Provisioned Eager Zeroed&#xff09;2、对比摘要 探索三种…