1. 概述
工作流引擎在业务流程自动化中扮演着关键角色。**Camunda平台是一个开源的工作流和业务流程管理系统(BPMS),为业务流程建模提供流程引擎。Spring Boot与Camunda平台有着良好的集成。本教程将探讨如何将嵌入式Camunda引擎集成到Spring Boot应用中**。
2. Camunda工作流引擎
Camunda工作流引擎是Activiti的一个分支,提供了基于业务流程建模与标注2.0(BPMN 2.0)标准的工作流和模拟引擎。此外,它还包含用于建模、执行和监控的工具及API。首先,我们可以使用Modeler对端到端的业务流程进行建模。Camunda提供的Modeler用于设计BPMN工作流,它作为桌面应用在本地运行。然后,我们将业务流程模型部署到工作流引擎并执行。我们可以通过REST API和提供的Web应用(Cockpit、Tasklist和Admin)以不同方式执行业务流程。Camunda引擎有多种使用方式:SaaS、自托管和可嵌入库。本教程重点介绍在Spring Boot应用中使用Camunda嵌入式引擎。
3. 创建带有嵌入式Camunda引擎的Spring Boot应用
本节将使用Camunda Platform Initializr创建并配置带有嵌入式Camunda引擎的Spring Boot应用。
3.1. Camunda Platform Initializr
我们可以使用Camunda Platform Initializr创建集成Camunda引擎的Spring Boot应用。这是Camunda提供的Web应用工具,类似于Spring Initializr。让我们在Camunda Platform Initializr中使用以下信息创建应用:
该工具允许我们添加项目元数据,包括Group、Artifact、Camunda BPM版本、H2数据库和Java版本。此外,我们可以添加Camunda BPM模块以支持Spring Boot应用中的Camunda REST API或Camunda Webapps。还可以添加Spring Boot Web和Security模块。另一个选项是设置管理员用户名和密码,这是Camunda Webapps(如Cockpit应用登录)所必需的。现在,点击"Generate Project"下载项目模板的.zip文件。最后,解压文件并在IDE中打开pom.xml。
3.2. Camunda配置
生成的项目是一个带有额外Camunda依赖和配置的常规Spring Boot应用。目录结构如下图所示:
在resources目录中有一个简单的工作流图process.bpmn。它使用开始节点启动流程执行。之后,继续执行Say hello to demo任务。该任务完成后,执行在遇到最终节点时停止。Camunda属性存在于application.yaml中。让我们查看application.yaml中生成的默认Camunda属性:
camunda.bpm.admin-user:
id: demo
password: demo
我们可以使用camunda.bpm.admin-user属性更改管理员用户名和密码。
4. 使用Spring Boot创建应用
另一种创建带有嵌入式Camunda引擎的Spring Boot应用的方式是从零开始构建Spring Boot应用并添加Camunda库。
4.1. Maven依赖
首先在pom.xml中声明camunda-bpm-spring-boot-starter-webapp依赖:
<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
<version>7.18.0</version>
</dependency>
我们需要一个数据库来存储流程定义、流程实例、历史信息等。本教程使用基于文件的H2数据库。因此,需要添加h2和spring-boot-starter-jdbc依赖:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
4.2. 示例流程模型
我们使用Camunda Modeler定义一个简单的贷款请求工作流图loanProcess.bpmn。以下是loanProcess.bpmn模型的执行顺序图形流程图,有助于理解:
我们使用开始节点启动流程执行。之后,执行Calculate Interest任务。接下来,继续执行Approve Loan任务。该任务完成后,执行在遇到最终节点时停止。Calculate Interest任务是服务任务,调用CalculateInterestService bean:
@Component
public class CalculateInterestService implements JavaDelegate {
private static final Logger LOGGER = LoggerFactory.getLogger(CalculateInterestService.class);
@Override
public void execute(DelegateExecution execution) {
LOGGER.info("calculating interest of the loan");
}
}
我们需要实现JavaDelegate接口。这个类可用于服务任务和事件监听器。*它在execute()*方法中提供流程执行期间要调用的所需逻辑**。现在,应用已准备就绪可以启动。
5. 演示
现在运行Spring Boot应用。打开浏览器并输入URL http://localhost:8080/:
输入用户凭据以访问Camunda Web应用Cockpit、Tasklist和Admin:
5.1. Cockpit应用
Camunda Cockpit Web应用提供用户设施,用于监控已实现流程及其操作的实时视图。我们可以看到Spring Boot应用启动时自动部署的流程数量:
如图所示,有一个已部署的流程(loanProcess.bpmn)。通过点击已部署的流程可以查看流程图:
目前流程尚未启动。我们可以使用Tasklist应用启动它。
5.2. Tasklist应用
Camunda Tasklist应用用于管理用户与其任务的交互。我们可以通过点击"Start process"菜单项启动示例流程:
启动流程后,Calculate Interest任务被执行。控制台输出日志:
2022-11-27 09:34:05.848 INFO 2748 --- [nio-8080-exec-3] c.e.c.task.CalculateInterestService : calculating interest of the loan
现在,我们可以在Cockpit应用中看到正在运行的流程实例:
注意流程正在等待Approve Loan用户任务。在此步骤中,我们将任务分配给demo用户。因此,demo用户可以在Tasklist应用中看到该任务:
通过点击"Complete"按钮完成任务。最后,我们可以在Cockpit应用中看到正在运行的流程已完成。
5.3. Admin应用
Camunda Admin应用用于管理用户及其系统访问权限。此外,我们还可以管理租户和组:
6. 总结
本文介绍了设置带有嵌入式Camunda引擎的Spring Boot应用的基础知识。我们使用Camunda Platform Initializr工具和从零开始的Spring Boot创建了应用。此外,我们使用Camunda Modeler定义了一个简单的贷款请求流程模型。并通过Camunda Web应用启动和探索了这个流程模型。本文中展示的代码的工作版本可在GitHub上获取。