工作流是我们开发企业应用几乎必备的一项功能,工作流引擎发展至今已经有非常多的产品。最近正好在接触Camunda,所以来做个简单的入门整合介绍。如果您也刚好在调研或者刚开始计划接入,希望本文对您有所帮助。如果您是一名Java开发或Spring框架爱好者,欢迎关注我程序猿DD,持续非常技术干货。

Camunda简介

Camunda是一个灵活的工作流和流程自动化框架。其核心是一个运行在Java虚拟机内部的原生BPMN 2.0流程引擎。它可以嵌入到任何Java应用程序和任何运行时容器中。

动手整合Camunda

下面就来一步步动手尝试一下吧。

准备工作

  1. 使用Camunda提供的项目初始化工具Camunda Automation Platform 7 Initializr

如上图,包名之类的根据自己需要做好配置,最后输入管理账号和密码,点击Generate Project按钮,自动下载工程。

  1. 解压下载后的工程,使用IntelliJ IDEA打开,其项目结构

  1. 打开pom.xml文件,添加camunda依赖:
<dependency>
<groupId>org.camunda.connect</groupId>
<artifactId>camunda-connect-core</artifactId>
</dependency> <dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-engine-plugin-connect</artifactId>
</dependency>

由于Camunda Automation Platform 7 Initializr默认的Spring Boot版本已经是3.1了,所以如果要做一些降级调整,可以手工修改pom.xmldependencyManagement配置,比如下面这样:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.4</version>
<type>pom</type>
<scope>import</scope>
</dependency> <dependency>
<groupId>org.camunda.bpm</groupId>
<artifactId>camunda-bom</artifactId>
<version>7.15.0</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
  1. 打开配置文件application.yaml,可以看到类似下面的内容
spring.datasource.url: jdbc:h2:file:./camunda-h2-database

camunda.bpm.admin-user:
id: transduck
password: 111111
  • spring.datasource.url:工作流引擎使用的数据库配置,您也可以根据官网文档去调整到其他数据库中(尤其生产环境)。
  • camunda.bpm.admin-user:管理员账户配置,可以在这里修改用户名和密码

创建一个简单的工作流

下面我们尝试创建一个简单的工作流:

第一步,我们将请求用户提供两个输入:name和message

第二步,我们将这些输入传递给我们的服务以创建消息输出

开始编码:

  1. 创建第一步提到的数据模型
public class model {

    private String message;
private String name; public model() { } public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "" + message + ", " + name;
}
}
  1. 根据第二步,创建接收消息的接口
@RequestMapping("/")
@RestController
public class controller { Logger logger = Logger.getLogger(this.getClass().getName()); @PostMapping("/message")
public model createMessage(@RequestBody model model) {
logger.info("-------Message Creator Initialized-------"); model m = new model();
m.setMessage(model.getMessage());
m.setName(model.getName()); logger.info("Message created --> " + m.toString());
return m;
}
}
  1. 下面我们可以开始创建工作流程图。在Camunda Modeler中打开我们项目的resources下的process.bpmn,我们将看到类似下面的流程图:

图中带有小人的框称为User Tasks,是执行与用户相关的操作的步骤。如前面部分所述,在工作流程的第一步中,我们将请求用户输入两个输入:姓名和消息。无需添加新任务,更新现有的User Tasks即可解决问题。单击User Tasks,打开属性面板,在打开的面板中定义适合我们案例内容。

  1. 完成基本信息填写后,转到Form选项卡。

这是定义呈现给用户的表单选项卡。由于我们需要用户输入姓名和消息,因此我们定义两个名为“name”和“message”的表单字段。要定义表单字段,请单击“表单字段”旁边的加号图标。在打开的表单中,相应地填写 ID、类型和标签字段。对每个表单字段重复相同的步骤。

  1. 开始配置第二步,调用我们的接口。添加Service Task

具体操作方法:单击左侧菜单中的Create Task图标,然后将任务拖放到随机位置。单击任务后,单击Change Type图标,然后从菜单中选择Service Task

  1. 填写基本信息

  1. 切换到Connector选项卡。这是定义 HTTP 信息和有关服务的数据的选项卡,在这里配置刚才定义的接口,具体如下图所示:

  1. Service Task连接到工作流程中。先删除User TasksEnd Event之间的箭头。然后,单击User Tasks并从菜单中选择箭头图标。将箭头连接到Service Task。最后,再连接Service TaskEnd Event

启动测试

在完成了上面的编码和工作流程配置后,我们就可以在调试模式下运行项目了。

启动完成后,在浏览器上访问地址http://localhost:8080/,您将看到 Camunda 登录页面:

输入您在application.yaml中配置的管理员配置信息,进入后台:

从应用程序主页中选择Tasklist,可看到如下界面:

然后在任务列表页面上单击Add a simple filter选项。单击后,您将看到名为All Tasks (0)的过滤器已添加到列表中,继续单击Start process选项来运行我们准备好的工作流程。

选择您的工作流进程,然后单击Start button,无需提供任何其他信息。

最后,单击Created下列出的Get Input任务。如果您没有看到该任务,请刷新页面。

您将看到我们在第一步中定义的表单。要填写表格,请单击右上角Claim选项。然后,根据您的喜好填写表格并单击Complete按钮。

当工作流执行Service Task并且服务运行时,您将看到列表再次变空。如果工作流成功执行了第二步,我们应该能够在控制台中看到输出。

小结

本文介绍了使用Spring Boot和Camunda创建一个简单工作流的完整步骤,希望对您有所帮助。如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

Spring Boot 整合 Camunda 实现工作流的更多相关文章

  1. spring boot 整合 Camunda

    官网:https://camunda.com/ 论坛:https://forum.camunda.org/ 一. 创建 spring boot 项目,添加项目依赖 <?xml version=& ...

  2. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  3. spring boot整合jsp的那些坑(spring boot 学习笔记之三)

    Spring Boot 整合 Jsp 步骤: 1.新建一个spring boot项目 2.修改pom文件 <dependency>            <groupId>or ...

  4. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  5. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  6. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  7. spring boot整合Hadoop

    最近需要用spring boot + mybatis整合hadoop,其中也有碰到一些坑,记录下来方便后面的人少走些弯路. 背景呢是因为需要在 web 中上传文件到 hdfs ,所以需要在spring ...

  8. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  9. spring boot 整合 百度ueditor富文本

    百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...

  10. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

随机推荐

  1. go并发 - goroutine

    概述 Go并发模型独树一帜,简洁.高效.Go语言最小执行单位称为协程(goroutine),运行时可以创建成千万上个协程,这在Java.C等线程模型中是不可想象的,并发模型是Go的招牌能力之一.很多文 ...

  2. C/C++ 常用加密与解密算法

    计算机安全和数据隐私是现代应用程序设计中至关重要的方面.为了确保数据的机密性和完整性,常常需要使用加密和解密算法.C++是一种广泛使用的编程语言,提供了许多加密和解密算法的实现.本文将介绍一些在C++ ...

  3. 🔥🔥Java开发者的Python快速进修指南:网络编程及并发编程

    今天我们将对网络编程和多线程技术进行讲解,这两者的原理大家都已经了解了,因此我们主要关注的是它们的写法区别.虽然这些区别并不是非常明显,但我们之所以将网络编程和多线程一起讲解,是因为在学习Java的s ...

  4. IDEA提示Cannot resolve symbol 'String'

    一.解决方案: 1.问题原因: 系统提示Cannot resolve symbol 'String',是由于没有正确导入JDK : 2.解决方案: 在project SDK中正确配置即可. 二.完成. ...

  5. MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

    1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端,只有服务器端服务开启以后,才可以通过客户端登录MySQL服务端. 首先,以管理员身份运行&qu ...

  6. RISC-V系列单片机快速入门指南

    如何获取芯片开发资料 方法一:按型号选择 我们更推荐采用按型号选择的方法,获取所对应型号芯片的开发资料,这能有效降低错误使用资料的风险! 沁恒官网首页的产品中心,点击青稞 RISC-V 通用系列,可跳 ...

  7. 华企盾DSC苹果电脑右键菜单不显示问题

    1.检查认证的用户是否给了对应的权限(如:手动加密.手动解密.申请解密) 2.系统偏好设置--键盘--快捷键中开通的权限是否有勾选 3.系统服务中允许的菜单数超出了最大值

  8. 【笔记】Ribbon负载均衡伪随机算法

    伪随机:思路 当一个下标(伪服务)连接被调用两次,第三次如果还是它,就让再随机一次 当重复随机到一台服务两次时判断第三次是否还是它 是的话 我们要进行 再次随机 也就是第三次 package top. ...

  9. 微软真是活菩萨,面向初学者的机器学习、数据科学、AI、LLM课程统统免费

    微软真是活菩萨,面向初学者的机器学习.数据科学.AI.LLM课程统统免费 大家好,我是老章 推荐几个质量上乘且完全免费的微软开源课程 面向初学者的机器学习课程 地址:https://microsoft ...

  10. Redis 分片集群

    1.Redis分片集群 1.1.搭建分片集群 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题,如图: 分片集群特 ...