Springboot +Flowable,服务任务ServiceTask执行的三种方式(二)

news/2024/11/28 15:49:23/

一.简介

ServiceTask 从名字上看就是服务任务,它的图标是像下面这样,截图如下:
在这里插入图片描述
ServiceTask 一般由系统自动完成,当流程走到这一步的时候,不会自动停下来,而是会去执行我们提前在 ServiceTask 中配置好的方法。

二.绘制流程图

首先绘制一个流程图,来看一下 ServiceTask 要处理。流程图截图如下:
在这里插入图片描述
中间这个就是一个 ServiceTask。

当流程执行到 ServiceTask 的时候,具体要做哪些事情?有三种不同的方式来设置这里的任务,下面分别来细说。

三. 表达式

也可以使用表达式。表达式就是一个普通类的普通方法,将这个普通类注册到 Spring 容器中,然后表达式中还可以执行这个类中的方法,类似下面这样,任意定义一个 Java 类,代码如下:

@Component
public class MyServiceTask2 {public void hello() {System.out.println("========MyServiceTask2==========");}
}

然后在流程图中按照如下方式进行配置,截图下图:
在这里插入图片描述
完整的表达式是 ${myServiceTask2.hello()}

下载这个XML文件,这个配置对应的 XML 内容如下:

<process id="demo01" name="测试流程" isExecutable="true"><documentation>测试流程</documentation><startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent><sequenceFlow id="sid-33A78082-C2FD-48BE-8B87-99FB20F0B331" sourceRef="startEvent1" targetRef="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8"></sequenceFlow><serviceTask id="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8" flowable:expression="${myServiceTask2.hello()}"></serviceTask><endEvent id="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></endEvent><sequenceFlow id="sid-0698809E-0A6C-4B92-A167-AE96A8CB75F2" sourceRef="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8" targetRef="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></sequenceFlow>
</process>

可以看到,表达式的内容是 flowable:expression="${myServiceTask2.hello()}

配置完成后,可以部署并启动这个流程,由于这个流程除了开始和结束,就这一个节点,所以流程一启动就自动结束了。不过在这个过程中,可以看到控制台打印出来了日志,说明这个 ServiceTask 确实是执行了。

四.类中字段

在绘制流程图的时候,还可以为类设置一个字段。例如给 ServiceTask 的执行类设置一个 username 字段,截图如下:
在这里插入图片描述

更改

在这里插入图片描述
设置完成后,下载这个XML文件,这个配置对应的 XML 内容如下:

<process id="demo01" name="测试流程" isExecutable="true"><documentation>测试流程</documentation><startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent><sequenceFlow id="sid-33A78082-C2FD-48BE-8B87-99FB20F0B331" sourceRef="startEvent1" targetRef="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8"></sequenceFlow><serviceTask id="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8" flowable:delegateExpression="${myServiceTask}"><extensionElements><flowable:field name="username"><flowable:string><![CDATA[javaboy]]></flowable:string></flowable:field></extensionElements></serviceTask><endEvent id="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></endEvent><sequenceFlow id="sid-0698809E-0A6C-4B92-A167-AE96A8CB75F2" sourceRef="sid-6FA66E2A-F8E6-4F10-8FA2-6450408E17D8" targetRef="sid-A5F11956-15EA-4574-98D0-29A4E3DB5495"></sequenceFlow>
</process>

可以看到,这里通过 extensionElements 节点描述了额外的信息

接下来,就可以在 Java 类中访问到得到这个变量了,代码如下:

@Component
public class MyServiceTask implements JavaDelegate {Expression username;@Overridepublic void execute(DelegateExecution execution) {System.out.println("username.getExpressionText() = " + username.getExpressionText());System.out.println("username.getValue(execution) = " + username.getValue(execution));System.out.println("========MyServiceTask==========");}
}

http://www.ppmy.cn/news/61798.html

相关文章

中断-STM32

中断-STM32 中断:在主程序运行过程中&#xff0c;出现了特定的中断触发条件 (中断源)&#xff0c;使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。 中断优先级:当有多个中断源同时申请中断时&#xff0c;CPU会根据中断源的轻重缓…

掌握黑客技术:从Kali渗透测试开始

前言 Kali Linux是一种流行的渗透测试和网络安全工具&#xff0c;广泛用于测试和评估网络系统和应用程序的安全性。下面是一个简单的Kali Linux使用教程&#xff08;Kali使用教程中需要学习的知识点&#xff09;&#xff0c;旨在帮助初学者了解如何使用Kali Linux进行渗透测试…

redis哨兵主从切换下数据丢失

&#xff08;1&#xff09;异步数据丢失问题&#xff1a; 当集群节点间网络或其他问题导致异步复制延时很高&#xff0c;如果此时master宕机了&#xff0c; 毫无疑问会丢失延时的这段时间的数据当集群节点间网络或其他问题导致异步复制延时很高&#xff0c; 如果此时master宕机…

自定义构建docker镜像

创建dockerfile 我们新建一个目录docker_test&#xff0c;然后在这个目录下新建一个dockerfile文件&#xff0c;文件内容如下&#xff1a; FROM centos VOLUME ["volume01","volume02"] CMD echo "......end......" CMD /bin/bash这些是docker…

ChatGPT做PPT方案,10组提示词方案!

今天我们要搞定的PPT内容是&#xff1a; 活动类型&#xff1a;节日活动、会员活动、新品活动分析类型&#xff1a;用户分析、新品立项、项目汇报内容类型&#xff1a;内容规划、品牌策划 用到的工具&#xff1a; mindshow 邀请码 6509097ChatGPT传送门&#xff08;免费使用…

音视频专家

作为一名顶级的音视频专家&#xff0c;需要在音视频领域拥有非常深入的技术理解和丰富的实践经验&#xff0c;并且要能够在行业内产生深远的影响和贡献。以下是更详细的顶级音视频专家提升计划&#xff1a; 1.深入研究音视频核心技术 作为顶级音视频专家&#xff0c;需要对音…

PR控制以及使用PR控制用于单相离/并网逆变器

文章目录 前言基本知识实际使用单相离网逆变器单相并网逆变器 PR控制器离散化基本知识 DSP实现总结 前言 最近想学习一下并网逆变器&#xff0c;需要用到PR控制&#xff0c;全网找遍了许多学习资料&#xff0c;终于掌握的差不多了&#xff0c;在此做个记录&#xff0c;以及个人…

Maven与spring学习

目录 该如何学习Maven&#xff0c;是先该学习spring还是先学习Maven 能讲一下该如何学习Maven吗&#xff1f; 火狐浏览器有能让网页翻译成为中文的插件吗 秋田和柴犬是同一个狗吗 该如何学习Maven&#xff0c;是先该学习spring还是先学习Maven 学习Maven可以与学习Spring同…