Spring Boot 整合 Camunda 实现工作流
工作流是我们开发企业应用几乎必备的一项功能,工作流引擎发展至今已经有非常多的产品。最近正好在接触
Camunda
,所以来做个简单的入门整合介绍。如果您也刚好在调研或者刚开始计划接入,希望本文对您有所帮助。如果您是一名Java开发或Spring框架爱好者,欢迎关注我
程序猿DD
,持续非常技术干货。
Camunda简介
Camunda是一个灵活的工作流和流程自动化框架。其核心是一个运行在Java虚拟机内部的原生BPMN 2.0流程引擎。它可以嵌入到任何Java应用程序和任何运行时容器中。
动手整合Camunda
下面就来一步步动手尝试一下吧。
准备工作
- 使用Camunda提供的项目初始化工具
Camunda Automation Platform 7 Initializr
如上图,包名之类的根据自己需要做好配置,最后输入管理账号和密码,点击
Generate Project
按钮,自动下载工程。
- 解压下载后的工程,使用
IntelliJ IDEA
打开,其项目结构
- 打开
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.xml
中
dependencyManagement
配置,比如下面这样:
<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>
- 打开配置文件
application.yaml
,可以看到类似下面的内容
spring.datasource.url: jdbc:h2:file:./camunda-h2-database
camunda.bpm.admin-user:
id: transduck
password: 666666666666
spring.datasource.url
:工作流引擎使用的数据库配置,您也可以根据官网文档去调整到其他数据库中(尤其生产环境)。camunda.bpm.admin-user
:管理员账户配置,可以在这里修改用户名和密码
创建一个简单的工作流
下面我们尝试创建一个简单的工作流:
第一步,我们将请求用户提供两个输入:name和message
第二步,我们将这些输入传递给我们的服务以创建消息输出
开始编码:
- 创建第一步提到的数据模型
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;
}
}
- 根据第二步,创建接收消息的接口
@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;
}
}
- 下面我们可以开始创建工作流程图。在
Camunda Modeler
中打开我们项目的
resources
下的
process.bpmn
,我们将看到类似下面的流程图:
图中带有小人的框称为
User Tasks
,是执行与用户相关的操作的步骤。如前面部分所述,在工作流程的第一步中,我们将请求用户输入两个输入:姓名和消息。无需添加新任务,更新现有的
User Tasks
即可解决问题。单击
User Tasks
,打开属性面板,在打开的面板中定义适合我们案例内容。
- 完成基本信息填写后,转到
Form
选项卡。
这是定义呈现给用户的表单选项卡。由于我们需要用户输入姓名和消息,因此我们定义两个名为“name”和“message”的表单字段。要定义表单字段,请单击“表单字段”旁边的加号图标。在打开的表单中,相应地填写 ID、类型和标签字段。对每个表单字段重复相同的步骤。
- 开始配置第二步,调用我们的接口。添加
Service Task
。
具体操作方法:单击左侧菜单中的
Create Task
图标,然后将任务拖放到随机位置。单击任务后,单击
Change Type
图标,然后从菜单中选择
Service Task
。
- 填写基本信息
- 切换到
Connector
选项卡。这是定义 HTTP 信息和有关服务的数据的选项卡,在这里配置刚才定义的接口,具体如下图所示:
- 将
Service Task
连接到工作流程中。先删除
User Tasks
和
End Event
之间的箭头。然后,单击
User Tasks
并从菜单中选择箭头图标。将箭头连接到
Service Task
。最后,再连接
Service Task
和
End 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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源