Camunda工作流引擎入门

article/2025/10/7 14:25:59

文档集合

1、camunda文档:https://docs.camunda.org/get-started/quick-start/

2、camunda资源下载:https://camunda.com/download/

3、camunda示例github仓库:https://github.com/camunda/camunda-bpm-examples

4、camunda 代码仓库:https://github.com/camunda

5、流程设计器软件camunda modeler下载:https://camunda.com/download/modeler/

6、Java API文档:https://docs.camunda.org/javadoc/camunda-bpm-platform/7.14-SNAPSHOT/

https://docs.camunda.org/manual/7.3/api-references/rest/

7、camunda-SpringBoot: https://docs.camunda.org/manual/develop/user-guide/process-engine/process-engine-api/

8、工作流选型:https://www.cnblogs.com/garfieldcgf/p/13469519.html

 

1 概述

Camunda是一个工作流引擎,执行Bpmn2.0标准,因此依赖于基于bpmn的流程图(本质上是一个xml文件)。

Camunda是基于activiti5,所以其保留了PVM。

 

Camunda从一开始就是为开发人员设计的:

Camunda BPM既可以用作独立的流程引擎服务器,也可以用在自定义Java应用程序中。

Camunda BPM还提供REST API,以便非Java开发人员可以构建连接到远程流程引擎的应用程序。

为了实现高可用性和可伸缩性,Camunda可以依赖于一个共享数据库在分布式集群上运行。

 

Camunda也照顾业务用户,Camunda BPM为非开发人员提供了广泛的工具:

Camunda使用ISO标准BPMN 2.0定义工作流程,为技术和非技术用户提供通用语言。

Camunda Modeler使业务分析师可以直观地定义工作流,并与开发人员一起协作实际部署。

Camunda Optimize为业务利益相关者提供实时监控和报告,因此不会对流程提出任何疑问。

 

Camunda还包括决策模型和表示法(DMN)决策引擎,以便业务用户可以定义和维护直接与工作流引擎集成的可执行业务规则。

Camunda BPM是Apache 2.0许可下的开源软件,这意味着您可以直接访问源代码和最小的供应商锁定。

 

 

ProcessDefinition

简单的认为就是画的流程图

 

ProcessInstance

流程图实例,就是根据某个流程图定义发起了一个新的流程,那么这个新的流程就是一个流程实例

 

StartEvent、EndEvent

流程的开始和结束节点

 

Task

任务,当流程流转到某个阶段,需要用户审核或者其他操作的时候,这个需要用户来完成的操作就是一个任务,除了用户任务之外,还有系统任务等其他任务

 

任务执行人

如果需要让某个用户执行某个任务,首先需要将任务分配给用户,一般有3种分配方式

 

直接指定,这里通过Assignee来直接指定某一个具体的用户(一般是用户ID或者唯一的用户名),支持表达式以支持动态指定

指定候选人,通过candidateUser来指定一系列候选人,如果是多个用户,通过,号分隔

指定候选组,通过candidateGroup来指定某一个组里面的所有用户(实际测试中,发现候选人和候选组是并集关系)

如果指定了候选人和候选组,那么并不意味着所有的候选人都需要执行任务,这些人首先需要进行一个认领的操作,一个任务只能由一个人认领,认领完成后才能执行任务,相对的,也可以取消认领

 

SequenceFlow

简而言之就是流程图的箭头,配合Gateway使用的时候,还可以在箭头上指定表达式,用于控制流向

 

流程变量

SequenceFlow的表达式依赖于流程变量,流程变量通过 流程启动、完成任务来传递

 

Gateway

网关,条件判断流程图流向,一般有Inclusive Gateway、Exclusive Gateway和Parallel Gateway

 

Exclusive Gateway

排他网关

 

 

排他网关可以有多个流出,但最终只能选择一条路径

 

Parallel Gateway

并行网关

 

 

并行网关可以有多个流出,并且每个流出都会被执行(忽略表达式),当每个流出都执行完毕之后,才进行下一步流转,并行网关的流入和流出的标识是相同的,例如

 

 

 

2 camunda基本使用

2.1 接口

ProcessEngine 核心接口,提供了工作流所有的操作的api。

 

1、RuntimeService 用于开启流程实例、删除流程实例、以及搜索流程实例等操作

2、TaskService 用于用户任务的认领、完成、分发等操作

3、IdentityService 用于提供身份认证以及管理用户和用户组

4、HistoryService 用于查询历史流程实例、历史任务以及历史流程变量等

5、FormService 用户内外联表单的渲染、通过提交表单开启流程实例、通过提交表单完成任务等

 

2.2 部署流程

新增一个流程定义和更新一个流程定义是同样的方法(更新的时候请保持processDefinitionKey不变)

@Autowired ProcessEngine engine ;engine.getRepositoryService().createDeployment() .addString(resource.getName() + ".bpmn", resource.getXml()) .deploy();

但是更新一个流程并非我们认为的更新,而是一个重新部署,事实上ProcessDefinition的id已经变了,因此如果我们通过如下方法查询流程定义:

processEngine.getRepositoryService().createProcessDefinitionQuery().active().list()

会查出来两个同样的流程定义,但事实上另一个重复的是我们更新的流程定义,如果只想显示最新的一个,查询语句上 加上 latestVersion() 这个即可,顺便说下通过定义id和定义key来启动流程的区别:

如果通过processDefinitionId来启动一个流程,那么代表启动流程定义的某一个版本,如果通过processDefinitionKey来启动流程,那么将会始终启动流程定义的最新版本。

 

2.3 解析BPMN模型

有时候我们需要在部署直接做一些校验,那么可以利用下面这个静态方法:

BpmnModelInstance modelInstance = Bpmn.readModelFromStream(is)

 

通过BpmnModelInstance我们可以做一些简单或者深入的判断,比如判断流程有没有结束事件:

modelInstance.getModelElementsByType(EndEvent.class).isEmpty()

判断启动任务有没有设置表单:

Collection<StartEvent> startEvents = modelInstance.getModelElementsByType(StartEvent.class); for (StartEvent startEvent : startEvents) { Collection<SequenceFlow> flows = startEvent.getIncoming(); if (flows.isEmpty()) { if (StringUtils.isEmpty(startEvent.getCamundaFormKey())) { //提醒用户设置启动表单 } } }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/Md7dRCkc.shtml

相关文章

工作流设计详解

工作流 概念&#xff1a; workflow流程性通知和审批控制&#xff0c;业务流程中、发送、提供附加信息或进行附加业务处理&#xff0c;两个或两个以上的人为共同目标&#xff0c;连续以并行或串行的方式完成某一业务。 工作流 设计&#xff1a; 按照业务规划流程图&#xff0…

什么是工作流?为什么程序员要用它?

每一个程序员&#xff0c;在接触到工作流的时候&#xff0c;都会有这么一个疑问——我用一般的方法可以实现&#xff0c;为什么还要用工作流&#xff1f; 我曾经也问过这个问题&#xff0c;不过现在稍微有点明白了。别着急要答案&#xff0c;看过下面的例子&#xff0c;或许你…

什么是工作流

什么是工作流&#xff1f; 工作流是从英文单词work flow中直译过来的。最直白的意思就是日常工作中相对固定的流程计算机化。 在此列举两个工作流简例&#xff1a; 客户到银行开户的工作流&#xff1a; 客户索取开户资料单——资料填写——营业员核对个人证件——营业员核对帐款…

什么是工作流?如何利用工作流引擎实现业务流程

工作流引擎是用来实现工作流的一种组件化工具&#xff0c;它是一整套解决方案&#xff0c;比如说一般工作流引擎包含这些功能&#xff1a;流程节点管理、流向管理等&#xff0c;是为了减小开发成本而推出的。因为在软件开发过程中&#xff0c;如果是从零开始实现工作流&#xf…

什么是工作流,flowable 与 Activiti对比

工作流 什么是工作流工作流是复杂版本的状态机Java工作流开源框架工作流对比Activiti设计器 Flowable兼容性 Camunda设计器兼容性&#xff1a;小结&#xff1a; 社区活跃度FlowableActivitiCamunda 总结 什么是工作流 工作流&#xff0c;是指“业务​过程的部分或整体在​计算…

工作流是什么

刚入职一家公司不久&#xff0c;昨天去和经理与客户对接需求的之前&#xff0c;经理问我接触过工作流没有之前。作为一个20年毕业的老人了&#xff0c;只能尴尬的说一句没有我下去会去了解下。这里我就暂且找一下别人总结的文章和大家一起学习下。 一、什么是工作流 工作流&a…

什么是工作流?

这里说的工作流是狭义的管理工作流程。 现代企业的日常活动中&#xff0c;70%以上都是有两个或两个以上的员工共同参与协作的的任务&#xff0c;比如生产流程、业务流程、各类行政申请流程、财务审批流程、人事处理流程、质量控制及客服流程等。一项工作&#xff0c;经过一个步…

union用法和enum用法

1 union用法 C语言中的union在语法上与struct相似。 union只分配最大成员的空间&#xff0c;所有成员共享这个空间 2 union的注意事项 union的使用受系统大小端的影响 编程&#xff1a;判断系统的大小端 #include <stdio.h>// 1&#xff1a;小端&#xff0c;0&…

C语言 C++中的union用法总结(包懂)

开始的话 已经好长时间没有更新了&#xff0c;对不起自己&#xff0c;更对不起我亲爱的读者&#xff0c;同时也对不起自己开办的这个博客平台。忙&#xff0c;太忙了&#xff0c;忙于找工作&#xff0c;找一份好工作&#xff0c;纠结于去大城市闯呢&#xff0c;还是回到本省的首…

php union用法,SQL Union用法是什么?

sql union用法是什么&#xff1f; sql union用法的总结&#xff1a; UNION 运算符将多个 SELECT 语句的结果组合成一个结果集。 (&#xff11;)使用 UNION 须满足以下条件&#xff1a; &#xff21;&#xff1a;所有查询中必须具有相同的结构(即查询中的的列数和列的顺序必须相…

mysql union语法,mysql中的union用法

UNION在mysql中被称为集合操作,操作类型分为两种:UNION DISTINCT 和 UNION ALL;注意:UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重,UNION ALL的功能为合并多个查询的结果不去重。 集合操作时,两边的输入必须拥有相同的列数,如果数据类型不…

mysql得union使用方法_mysql中Union All使用方法

在mysql数据库使用UNION 时&#xff0c;会把结果集中重复的记录删掉&#xff0c;也正因为做了去重操作&#xff0c;所以效率相对Union All来讲稍微低一点&#xff0c;使用UNION ALL &#xff0c;MySQL 会把所有的记录返回&#xff0c;效率高于UNION。本文向大家介绍UNION ALL的…

SQL 中union的使用

采用where的解法 select name,population,area from World where area>3000000 or population>25000000 ;使用union的解法 select name,population,area from World where area>3000000 union select name,population,area from World where population>2500000…

C语言共用体(C语言union用法)详解

转载重点&#xff1a;共用体的所有成员占用同一段内存&#xff0c;修改一个成员会影响其余所有成员。图形分析影响过程 通过前面的讲解&#xff0c;我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中…

C语言 union用法

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a; …

c语言union(c语言union用法)

C语言-程序运行结果是&#xff1f;main(){unionstu{lon 我的机器&#xff0b;vc6运行的结果是12 我的理解是首先取最长的b的长度&#xff0c;但是b的长度比我的机器字长(32位即4个字节)整数倍要短&#xff0c;则sizeof(stu)的长度是12 不知道你的机器是不是64位的 如果是则证…

quartz mysql 配置_quartz的数据库配置

Quartz.net官方开发指南 第九课&#xff1a; JobStore JobStore负责保持对所有scheduler “工作数据”追踪&#xff0c;这些工作数据包括&#xff1a;job(任务),trigger(触发器),calendar(日历)等。为你的Quartz scheduler选择合适的JobStore是非常重要的一步&#xff0c;幸运的…

java 灵活配置quartz

项目背景&#xff1a; 最近项目上遇到个需求&#xff0c;需要我们在特定的事件做邮件和短信的发送。但时间并不固定&#xff0c;是根据用户配置的时间表来进行的定时发送任务。有点像闹钟&#xff0c;你设置的时间到了就响。这里我们采取的是每天凌晨定时取数据库里的时间表信…

java quartz配置_java quartz简单使用

1.在项目里引入quartz org.quartz-scheduler quartz 2.3.0 2.quartz的简单实例 package com.example.quartz_demo; import org.quartz.JobDetail; import org.quartz.Scheduler; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrig…

SpringBoot - 集成Quartz框架之常用配置(二)

文件约定 在Quartz发布的JAR包的org.quartz包下&#xff0c;包含了一个命名为quartz.properties的配置文件并提供了默认属性&#xff0c;如果需要调整默认配置&#xff0c;则可以在类路径下建立一个新的quartz.properties&#xff0c;它将自动被Quartz加载并覆盖默认值。如果使…