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中使用以下信息创建应用:

init

该工具允许我们添加项目元数据,包括GroupArtifactCamunda 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应用。目录结构如下图所示:

camunda proyect

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数据库。因此,需要添加h2spring-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模型的执行顺序图形流程图,有助于理解:

loanProcess

我们使用开始节点启动流程执行。之后,执行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 login

输入用户凭据以访问Camunda Web应用Cockpit、Tasklist和Admin:

camunda welcome

5.1. Cockpit应用

Camunda Cockpit Web应用提供用户设施,用于监控已实现流程及其操作的实时视图。我们可以看到Spring Boot应用启动时自动部署的流程数量:

camunda cockpit

如图所示,有一个已部署的流程(loanProcess.bpmn)。通过点击已部署的流程可以查看流程图:

loanProcess deploy

目前流程尚未启动。我们可以使用Tasklist应用启动它。

5.2. Tasklist应用

Camunda Tasklist应用用于管理用户与其任务的交互。我们可以通过点击"Start process"菜单项启动示例流程:

camunda tasklist

启动流程后,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应用中看到正在运行的流程实例:

loanProcess assign

注意流程正在等待Approve Loan用户任务。在此步骤中,我们将任务分配给demo用户。因此,demo用户可以在Tasklist应用中看到该任务:

loanProcess tasklist

通过点击"Complete"按钮完成任务。最后,我们可以在Cockpit应用中看到正在运行的流程已完成。

5.3. Admin应用

Camunda Admin应用用于管理用户及其系统访问权限。此外,我们还可以管理租户和组:

admin

6. 总结

本文介绍了设置带有嵌入式Camunda引擎的Spring Boot应用的基础知识。我们使用Camunda Platform Initializr工具和从零开始的Spring Boot创建了应用。此外,我们使用Camunda Modeler定义了一个简单的贷款请求流程模型。并通过Camunda Web应用启动和探索了这个流程模型。本文中展示的代码的工作版本可在GitHub上获取。


原始标题:Running Spring Boot Applications with the Embedded Camunda Engine

« 上一篇: Java Weekly, 第467期
» 下一篇: Spring CredHub 指南