写点什么

Spring Boot 整合 Camunda 实现工作流

作者:EquatorCoco
  • 2024-01-18
    福建
  • 本文字数:2685 字

    阅读完需:约 9 分钟

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


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("/")@RestControllerpublic 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并且服务运行时,您将看到列表再次变空。如果工作流成功执行了第二步,我们应该能够在控制台中看到输出。


文章转载自:程序猿DD

原文链接:https://www.cnblogs.com/didispace/p/17971567

体验地址:http://www.jnpfsoft.com/?from=001

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Spring Boot 整合 Camunda 实现工作流_Java_EquatorCoco_InfoQ写作社区