Camunda外部任务

news2025/1/25 9:07:37

外部任务:即任务可以在外部系统进行审批。

一:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-camunda-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-camunda</name>
    <description>springboot-camunda</description>

    <properties>
        <camunda.spring-boot.version>7.17.0</camunda.spring-boot.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-external-task-client</artifactId>
            <version>${camunda.spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

二:application.yml

server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/camunda?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&&nullCatalogMeansCurrent=true
    username: root
    password: root123
    driver-class-name: com.mysql.cj.jdbc.Driver

camunda:
  bpm:
    client:
      base-url: http://localhost:8080/engine-rest
      #一次最多拉取的任务数量
      max-tasks: 1
      #工作节点id
      worker-id: springboot-camunda-client
      # 长轮询挂起时间间隔,默认20s
      async-response-timeout: 20000
      #全局订阅topic的上锁时间,单位毫秒,锁住期间其它订阅者获取不到
      #这个配置时间要大于业务处理时间
      lock-duration: 60000
      basic-auth:
        username: admin
        password: 123456

三:bpmn

在这里插入图片描述

四:config

@Configuration
public class CamundaHandlerConfig {

    @Bean
    @ExternalTaskSubscription(topicName = "demo_external_task_topic",
            processDefinitionKeyIn = {"ExternalTaskProcess"},
            lockDuration = 5000)
    public ExternalTaskHandler externalTaskHandler() {
        return (ExternalTask externalTask, ExternalTaskService externalTaskService) -> {
            boolean flag = (boolean)externalTask.getVariable("flag");
            // 处理业务逻辑...
            if (!flag) {
                externalTaskService.handleFailure(externalTask, "error msg...", "error detail 异常堆栈信息等...", 0, 5000);
            }
            VariableMap variables = Variables.createVariables();
            variables.put("code", "ok");
            externalTaskService.complete(externalTask, variables);
        };
    }
}

客户端代码通过rest api通过长轮询Long Polling的方式去拉取任务,发送一次请求,如果没有任务返回会将请求挂起,进行等待(等待时间可以配置),超过等待时间再进行相应。这样就缓解了不停的循环去拉取。
在这里插入图片描述

五:启动流程

repositoryService.createDeployment()
       .name("外部任务流程")
       .addClasspathResource("bpmn/diagram_2.bpmn")
       .deploy();

identityService.setAuthenticatedUserId("huihui");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ExternalTaskProcess");

Task task = taskService.createTaskQuery()
       .processInstanceId(processInstance.getId())
       .singleResult();
Map<String,Object> variables = new HashMap<>();
variables.put("flag", true);
taskService.complete(task.getId(), variables);

在这里插入图片描述

六:获取外部任务设置的变量

下一个节点:经理审批 获取上一个外部任务设置的流程变量。

Task task = taskService.createTaskQuery()
      .processInstanceId("4f8c5081-aec5-11ee-b9f6-92e97825df95")
       .singleResult();
Map<String, Object> variables = taskService.getVariables(task.getId());
System.out.println(variables);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1372857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型LLM在 Text2SQL 上的应用实践

一、前言 目前&#xff0c;大模型的一个热门应用方向Text2SQL&#xff0c;它可以帮助用户快速生成想要查询的SQL语句&#xff0c;再结合可视化技术可以降低使用数据的门槛&#xff0c;更便捷的支持决策。本文将从以下四个方面介绍LLM在Text2SQL应用上的基础实践。 Text2SQL概…

22、Kubernetes核心技术 - 整合Rancher通过界面管理k8s集群

目录 一、概述 二、Rancher API Server 的功能 2.1、授权和角色权限控制 2.2、使用 Kubernetes 的功能 2.3、配置云端基础信息 2.4、查看集群信息 三、Rancher 安装 3.1、前置环境 3.2、通过 Docker 来进行安装Rancher 3.3、在 Rancher 的界面上绑定k8s集群 3.4、在 …

redis 主从同步和故障切换的几个坑

数据不一致 当我们从节点读取一个数据时&#xff0c;和主节点读取的数据不一致&#xff0c;这是因为主从同步的命令是异步进行的&#xff0c;一般情况下是主从同步延迟导致的&#xff0c;为什么会延迟&#xff0c; 主要二个原因 1、网络状态不好 2、网络没问题&#xff0c;从节…

java 项目使用 activi 设计流程,流程线上设置条件表达式时出现以下错误

项目场景&#xff1a; 背景&#xff1a; java 项目使用 activi 设计流程&#xff0c;流程线上设置条件表达式后&#xff0c;保存时出现错误 问题描述 问题&#xff1a; java 项目使用 activi 设计流程&#xff0c;流程线上设置条件表达式后&#xff0c;保存时出现以下错误&…

Matlab 之数据分布拟合

文章目录 Part.I IntroductionPart.II Distribution Fitter APP 的使用Chap.I APP 简介Chap.II 简单使用 Part.III 通过代码实现分布拟合Chap.I 基于 fitdist 函数Chap.II 获取数据的频率分布后进行曲线拟合 Reference Part.I Introduction 本文主要介绍了如何使用 Matlab 对数…

Linux学习记录——삼십팔 网络层IP协议

文章目录 1、了解IP协议2、IP协议报文1、8位服务类型2、16位总长度&#xff08;字节数&#xff09;3、8位生存时间&#xff08;TTL&#xff09; 3、网段划分1、网段划分和CIDR方案2、子网划分简单方法3、IP地址问题的解决方案 4、公网内网1、内网分配2、运营商管理方法 5、路由…

2024年3月10日PMI认证考试的报名时间确定!

⏰中国大陆地区2024年第1期PMI认证考试于3月10日举办 ⏰报名时间&#xff1a; 为减少同一时间集中报名造成的网络拥堵&#xff0c;本次报名将采取以下形式分地区、分批次开放报名。&#x1f447; 1️⃣第1批报名城市&#xff1a;⏰2024年1月11日10:00至1月18日16:00&#xff0c…

【昕宝爸爸定制】如何将集合变成线程安全的?

如何将集合变成线程安全的? ✅典型解析&#x1f7e2;拓展知识仓☑️Java中都有哪些线程安全的集合&#xff1f;&#x1f7e0;线程安全集合类的优缺点是什么&#x1f7e1;如何选择合适的线程安全集合类☑️如何解决线程安全集合类并发冲突问题✔️乐观锁实现方式 (具体步骤)。✅…

基于 Validator 类实现 ParamValidator,用于校验函数参数

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 使用 TypeV…

dubbo的springboot集成

1.什么是dubbo&#xff1f; Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo …

vmlinux, System.map; cmake的find_package(Clang)产生的变量们; geogebra单位切向量(简单例子)

linux4.15.y内核中的函数个数 依赖关系: vmlinux, vmlinux.bin, bzImage cd /bal/linux-stable/ file vmlinux #vmlinux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, BuildID[sha1]b99bbd9dda1ec2751da246d4a7ae4e6fcf7d789b, not str…

Git远端删除的分支,本地依然能看到 git remote prune origin

在远端已经删除ylwang_dev_786等三四个分支&#xff0c;本地git branch -a 时 依然显示存在。 执行 git remote show origin 会展示被删除的那些分支 当你在Git远程仓库&#xff08;如GitLab&#xff09;上删除一个分支后&#xff0c;这个变更不会自动同步到每个开发者的本地…

【教学类-45-01】X-Y之间的“三连加“题(a+b+c=)

作品展示&#xff1a; 背景需求&#xff1a; 我常去的大4班孩子们基本都适应了0-5之间的加法题&#xff0c;做题速度极快。 为了增加“花样”&#xff0c;吸引幼儿参与&#xff0c;修改参数&#xff0c;从二连加12变为三连加111。 素材准备: 代码重点 代码展示 X-Y 之间的3…

springboot基于java的小区物业管理系统(保安巡逻绿化消防)设计+jsp

小区物业管理系统采用的是JAVA语言开发&#xff0c;利用MySQL为数据库&#xff0c; 使用IDEA平台来编写代码&#xff0c;框架方面选择的是springbootweb框架&#xff0c;采用B/S结构实现系统。本系统的设计与开发过程中严格遵守软件工程的规范&#xff0c;运用软件设计模式&…

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…

Xcalibur软件Qual Brower程序的使用

找到Qual Brower&#xff1a;在System>Program里 打开采集的数据文件*.RAW&#xff0c;软件界面主窗口能查看色谱图和质谱图&#xff1a; 1、图形的放大和拷贝、色谱中查看峰的质谱信息&#xff1a; 点亮如图图像右上角的按钮&#xff0c;可以激活该图形并进行操作&#x…

前端 Node 项目迁徙为桌面 Electron 应用笔记

起因 我的服务器到期了&#xff0c;服务器上有几个服务&#xff0c;人家问这几个网站怎么不好使了&#xff0c;奈何服务器续费太贵租不起了… 但是服务还是要提供的&#xff0c;所以我在想如何把 node 的项目变成桌面端应用&#xff0c;于是有了这个笔记 效果展示 页面没啥…

强化学习10——免模型控制Q-learning算法

Q-learning算法 主要思路 由于 V π ( s ) ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) V_\pi(s)\sum_{a\in A}\pi(a\mid s)Q_\pi(s,a) Vπ​(s)∑a∈A​π(a∣s)Qπ​(s,a) &#xff0c;当我们直接预测动作价值函数&#xff0c;在决策中选择Q值最大即动作价值最大的动作&…

如何寻找到相对完整的真正的游戏的源码 用来学习?

在游戏开发的学习之路上&#xff0c;理论与实践是并重的两个方面。对于许多热衷于游戏开发的学习者来说&#xff0c;能够接触到真实的、完整的游戏源码无疑是一个极好的学习机会。但问题来了&#xff1a;我们该如何寻找到这些珍贵的资源呢&#xff1f; 开源游戏项目 GitHub:地…

BUUCTF ---> Encrypto

转眼就一月十号了&#xff0c;本来今天不想更的&#xff0c;&#xff08;因为我懒&#xff09;是因为明天要考python&#xff0c;好像还不止 但是呢&#xff0c;发现BUUCTF的密码学模块刚好可以用到py的脚本&#xff0c;那就当时复习一下吧&#xff01;&#xff01; 这里就要介…