工作流引擎Flowable介绍及SpringBoot整合使用实例
Flowable简介
Flowable 是一个轻量级的业务流程管理(BPM)和工作流引擎,基于 Activiti 项目发展而来,专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。
Flowable 的核心特点
- 基于 BPMN 2.0 标准
- 支持使用 BPMN(Business Process Model and Notation) 标准建模业务流程。
- 提供图形化设计器(如 Flowable Modeler)来设计流程。
- 轻量级 & 可嵌入
- 可以作为库集成到 Java 应用中,不依赖复杂的外部服务。
- 支持 Spring Boot 快速集成。
- 多种流程管理能力
- 支持 人工任务(User Task)、自动服务任务(Service Task)、定时器(Timer)、子流程(Subprocess) 等。
- 提供 流程实例管理、任务分配、历史数据查询 等功能。
- 支持多种数据库
- 兼容 MySQL、PostgreSQL、Oracle、SQL Server 等关系型数据库。
- REST API 支持
- 提供 Flowable REST API,方便与其他系统集成。
- 扩展性强
- 支持自定义监听器(Listeners)、变量(Variables)和脚本(如 Groovy、JavaScript)。
Flowable UI
这里要体验一下Flowable的功能的话,最方便的是用docker跑一下官方的flowable ui,脚本如下:
docker run -d -p 8080:8080 flowable/flowable-ui
跑起来访问:http://localhost:8080/flowable-ui/ ,可以看到4个应用:
- 任务应用程序:可以发起流程,处理任务等操作
- 建模器应用程序:图形化流程设计工具、流程建模
- 管理员应用程式:流程监控和管理控制台
- 身份管理应用程序:用户管理
这个主要是体验一下Flowable的功能,一般我们可能不会在项目上直接用这些应用程序,但是其中一个比较重要的应用建模器应用程序肯定是会用到的,主要是使用它对我们的业务流程进行编排,它使用的是BPMN(Business Process Model and Notation) 标准建模业务流程,提供了图形化设计器(Flowable Modeler)来设计流程。
虽然idea有插件可以支持BPMN图形化编辑,但是我并不推荐,可以装一个查看流程图,但是编辑我没有找到多节点任务相关的配置,可能是支持并不完全,所以直接使用官方提供的工具肯定是最好的。
BPMN(Business Process Model and Notation) 是一个标准建模业务流程,不只是Flowable,还有其他的一些工作流引擎同样是用的这个标准,如:Activiti、Camunda、jBPM等,所以使用以上任意一个工作流引擎都需要了解BPMN建模方法。
以上是我创建的一个请假的审批流程:
- 发起人发起请假流程,填写姓名、请假天数、理由信息
- 请假天数大于3天则由部门经理审批,请假天数小于3天则由小组leader审批
- 初审通过后由HR审核,这里创建的是多实例用户节点,可以由多个HR同时审批,任意一个HR操作审核通过即可(或签)
- 两次的审核任意一次审核驳回了,就调用服务节点,执行我们的一段Java代码,这里就是自己去实现发邮件、发短信等等操作
这里就以这么一个流程为例,整合到SpringBoot中,通过提供接口的方式,实现流程的发起、待审核任务的查询、审核指定任务、回调服务代码等功能。
flowable-spring-boot-starter
这里用的是flowable-spring-boot-starter
这个starter依赖,版本选用的是7.1.0,对应的JDK17,spring-boot版本3.3.8,数据库用的MySql 8,添加以下依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>7.1.0</version></dependency>
</dependencies>
配置添加数据库的连接配置即可,flowable配置基本都有默认值,如果需要修改可以看看flowable流程引擎的自动装配类ProcessEngineAutoConfiguration
相关的一些配置类FlowableProperties
等
基本不需要做什么其他配置,引入依赖后启动项目,会自动创建流程引擎相关的表,一共有62张表。
主要的服务类
操作流程引擎最主要使用到的是以下几个核心的类,可以注入到我们的程序里:
@Resource
private ProcessEngine processEngine;@Resource
private RepositoryService repositoryService;@Resource
private RuntimeService runtimeService;@Resource
private TaskService taskService;
ProcessEngine
用途:Flowable 的核心引擎,是所有服务的入口,用于获取其他服务实例(如 RepositoryService
、RuntimeService
等)。
RepositoryService
用途:管理 流程定义(Process Definition) 和 部署(Deployment),操作静态资源(如 BPMN 文件)。
核心功能:
- 部署流程定义(
.bpmn
或.bpmn20.xml
文件)。 - 查询、删除流程定义。
- 挂起/激活流程定义。
RuntimeService
用途:管理 流程实例(Process Instance) 和 执行流(Execution),负责流程的启动与运行时控制。
核心功能:
- 启动流程实例(基于流程定义)。
- 触发流程继续执行(如通过信号事件)。
- 查询或操作运行中的流程实例。
TaskService
用途:管理 用户任务(User Task),处理人工审批环节。
核心功能:
- 查询任务(如待办任务、已完成任务)。
- 完成任务(提交审批)。
- 分配任务给用户/组。
- 设置任务变量(如审批意见)。
使用以上的几个服务类即可完成流程审批的业务流程,具体代码我已经上传到github
https://github.com/chengpei/spring-ai-demo
其中flowable-demo模块就是Flowable流程相关的代码,其他模块是spring ai相关的代码可以忽略。
流程部署
在Flowable UI章节我使用建模器应用程序创建了一个请假的审批流程,在页面上找到导出到BPMN2按钮,会下载一个xml文件,里面就是我们定义的流程描述文件,将项目的resources
目录下新建一个文件夹processes
,将流程描述文件放入到该文件夹下,重启项目即可,程序会自动读取该文件夹内的流程自动部署。
如果需要更改文件夹位置,可以修改配置flowable.processDefinitionLocationPrefix
,配置在FlowableProperties
类里
演示代码
代码我已经上传到github
https://github.com/chengpei/spring-ai-demo
主要是FlowableDemoController里的几个接口,这里就不贴代码了,直接github中找到项目的flowable-demo模块,其他模块是spring ai相关的代码请忽略,以下是接口调用的示例:
### 发起流程
GET http://localhost:8080/flowable/start?name=zhangsan&days=5&reason=不想上班### 查询我的任务
GET http://localhost:8080/flowable/queryTask?name=manager&processId=09295702-0877-11f0-a7fe-bafcde6eec46### 任务审核 - 通过
GET http://localhost:8080/flowable/completeTask?taskId=7d7a3749-0876-11f0-a354-bafcde6eec46&outcome=通过
### 任务审核 - 驳回
GET http://localhost:8080/flowable/completeTask?taskId=094f55a1-0877-11f0-a7fe-bafcde6eec46&outcome=驳回### 查看任务流程图
GET http://localhost:8080/flowable/processDiagram?processId=09295702-0877-11f0-a7fe-bafcde6eec46
跑起来看看代码调用效果就可以了,也比较简单,每执行一步可以在游览器里调用查看任务流程图接口,看流程执行到哪一步了,其中唯一可能值得说一说的就是HR审核节点,是一个多实例用户节点
多实例任务节点
上述请假流程中的HR审核接口是一个多实例任务节点,所谓多实例就是该节点的处理人涉及到多人,配置如下:
多实例类型:有并行和串行两种方式,并行可能用的比较多,一般到这个接口多实例的每个处理人是同时收到这个任务,可以同时处理,这就是并行。
集合(多实例):指向一个流程变量,这个变量可以是一个数组,每个元素就是处理人
元素变量(多实例):类似for循环集合中的每一项,for (var 元素变量 in 集合)
完成条件(多实例):指该多实例节点任务的完成条件,其中涉及以下几个变量:
- nrOfInstances:实例总数。
- nrOfActiveInstances:当前活动的(即未完成的),实例数量。对于顺序多实例,这个值总为1。
- nrOfCompletedInstances:已完成的实例数量。
- loopCounter:给定实例在_for-each循环中的index_。可以通过Flowable的elementIndexVariable属性为loopCounter变量重命名。
我这里配置的是${nrOfCompletedInstances==1}
,代表多实例节点已完成的实例数量为1就算节点完成,业务上我们称它为或签,多个并行的处理人只要有一个处理了就算完成。业务上对应的还有一种会签,代表多个并行的处理人全部处理了才算完成,可以配置为${nrOfCompletedInstances==nrOfInstances}
参考中文翻译文档这个章节:https://tkjohn.github.io/flowable-userguide/#bpmnMultiInstance
参考资料:
官网网站:https://www.flowable.com/open-source
官方文档:https://www.flowable.com/open-source/docs/oss-introduction
中文翻译文档:https://tkjohn.github.io/flowable-userguide/
虽然中文翻译文档版本不是最新的,不过基本功能都一样
相关文章:
工作流引擎Flowable介绍及SpringBoot整合使用实例
Flowable简介 Flowable 是一个轻量级的业务流程管理(BPM)和工作流引擎,基于 Activiti 项目发展而来,专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。 Flowable 的核心…...
推荐一个可以自定义github主页的网站
一、简介 Profile Readme Generator 是一个开源工具,可以帮助你快速创建个性化的 GitHub 个人简介(README)。它支持自定义内容和样式,让你的 GitHub 个人主页更加美观和专业。 二、使用步骤 (一)访问网站…...
【R语言可视化】相关系数热图
目录 热图无显著性 结果展示01: 热图显著性 结果展示02: ggplot2绘制三角热图 结果展示03: corrplot绘制三角热图 结果展示04: 热图无显著性 # 示例数据 data(mtcars) df <- mtcars# 计算相关矩阵 cor_matrix <- round(cor(df…...
【区块链 + 文化版权】文创链 | FISCO BCOS 应用案例
“文创链”是由四川省区块链行业协会、成都音像出版社有限公司共同发起, 由成都九天星空科技有限公司等联合打造的数字文创领域联盟链。平台采用FISCO BCOS 开源底层框架, 为数字文创产业构建一个高效、透明、可信的版权管理与交易平台。 平台专注于数字…...
# 使用自定义Shell脚本hello快速配置Linux用户账户
使用自定义Shell脚本快速配置Linux用户账户 在学校实验室管理Linux服务器,或者公司小团队管理服务器时,大家需要一个能隔离自己服务,但是自己又需要对服务器的完整权限的情形。创建和配置用户账户是一项常见但繁琐的任务。特别是当你需要频繁…...
PyTorch中的Tensor
PyTorch中的Tensor 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 核心数据结构 Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D&am…...
16-CSS3新增选择器
知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义,使文档变得更加简洁? 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…...
关于笔记本电脑突然没有wifi图标解决方案
笔记本电脑突然没有wifi图标解决方案,设置里也看不见wifi,电脑突然就连不网络了 解决方案: 我的电脑——>管理——>服务和应用程序——>服务——>找到WLAN AutoConfig——>点击启动就好了...
Pytorch学习笔记(七)Learn the Basics - Optimizing Model Parameters
这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Optimizing Model Parameters 部分。 官网链接:https://pytorch.org/tutorials/beginner/basics/optimization_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwd…...
数据可视化TensorboardX和tensorBoard安装及使用
tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具,而 TensorBoardX 是其社区驱动的替代品,支持 PyTorch 等其他框架。以下是它…...
工业4G路由器赋能智慧停车场高效管理
工业4G路由器作为智慧停车场管理系统通信核心,将停车场内的各个子系统连接起来,包括车牌识别系统、道闸控制系统、车位检测系统、收费系统以及监控系统等。通过4G网络,将这些系统采集到的数据传输到云端服务器或管理中心,实现信息…...
深度学习1—Python基础
深度学习1—python基础 你的第一个程序 print(hello world and hello deep learning!)基本数据结构 空值 (None):在 Python 中,None 是一个特殊的对象,用于表示空值或缺失的值。它不同于数字 0,因为 0 是一个有意义的数字&#…...
数据结构十三、set map
一、set 1、size / empty size:返回set中实际元素的个数 empty:判断set是否为空 2、begin / end 这是两个迭代器,因此可以使用范围for来遍历整个红黑树。其中,遍历是按照中序遍历的顺序,因此是一个有序序列。 3、in…...
【大模型基础_毛玉仁】3.5 Prompt相关应用
目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛,能提升大语言模型处理基础及复杂任务的能力,在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …...
自动驾驶VLA模型技术解析与模型设计
1.前言 2025年被称为“VLA上车元年”,以视觉语言动作模型(Vision-Language-Action Model, VLA)为核心的技术范式正在重塑智能驾驶行业。VLA不仅融合了视觉语言模型(VLM)的感知能力和端到端模型的决策能力,…...
【AI】Orin NX+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功
【AI】郭老二博文之:AI学习目录汇总 1、烧写系统 新到的开发板,已经烧写好Ubuntu系统,版本为22.04。 如果没有升级到Ubuntu22.04,可以在电脑Ubuntu系统中使用SDKManager来烧写Ubuntu系统,网络情况好的话,也可以直接将CUDA、cuDNN、TensorRT、Deepstream等也安装上。 2…...
vscode 通过Remote-ssh远程连接服务器报错 could not establish connection to ubuntu
vscode 通过Remote-ssh插件远程连接服务器报错 could not establish connection to ubuntu,并且出现下面的错误打印: [21:00:57.307] Log Level: 2 [21:00:57.350] SSH Resolver called for "ssh-remoteubuntu", attempt 1 [21:00:57.359] r…...
ESP32S3 WIFI 实现TCP服务器和静态IP
一、 TCP服务器代码 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an &q…...
第三课:Stable Diffusion图生图入门及应用
文章目录 Part01 图生图原理Part02 图生图基本流程Part03 随机种子作用解析Part04 图生图的拓展应用 Part01 图生图原理 当提示词不能足够表达用户需求的时候,加入图片能让AI更好的理解你的想法图片上的像素信息会在加噪和去噪的过程中,作为一种特征反映…...
蓝桥与力扣刷题(蓝桥 蓝桥骑士)
题目:小明是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。 身为高傲的骑士&a…...
Photoshop怎样保存为ico格式
1. 打开图像 开启 Photoshop 软件,选择 “文件” 菜单,点击 “打开” 选项,然后找到你想要保存为 ICO 格式的图像文件并打开。 2. 调整图像大小(可选) ICO 图标通常有特定尺寸要求,你可以根据需求调整图像…...
Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3
bge-large-zh-v1.5 下载模型到指定路径: modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir ./bge-large-zh-v1.5自定义 embedding 模型,custom-bge-large-zh-v1.5.json: {"model_name": "custom-bge-large…...
python笔记之判断月份有多少天
1、通过随机数作为目标月份 import random month random.randint(1,12)2、判断对应的年份是闰年还是平年 因为2月这个特殊月份,闰年有29天,而平年是28天,所以需要判断对应的年份属于闰年还是平年,代码如下 # 判断年份是闰年还…...
Kotlin泛型: 协变|逆变|不变
引言 无论java 通配符上限还是下限,都多少存在缺陷,要么存不安全,要么取不安全。而kotlin就解决这个问题。让out 纯输出, 让in纯输入。 java这块知识: java泛型的协变、逆变和不变-CSDN博客 协变 生产者out T 协变…...
高斯数据库的空分区的查看和清理
在 高斯数据库(GaussDB) 中,分区表是一种常见的表设计方式,用于优化大数据的查询性能。 一、空分区的影响: 存储空间占用 元数据开销:即使分区中没有数据,数据库仍然需要维护分区的元数据&…...
word使用自带的公式
文章目录 Word公式中word公式快捷键:word2016公式框输入多行word 公式加入空格:word公式如何输入矩阵:公式图片转为Latex语法word 能直接输入 latex 公式么word公式中有的是斜体有的不是 word文本中将文字转为上标的快捷键 Tips几个好用的网站࿱…...
Linux系统-ls命令
一、ls命令的定义 Linux ls命令(英文全拼:list directory contents)用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 二、ls命令的语法 ls [选项] [目录或文件名] ls [-alrtAFR] [name...] 三、参数[选项…...
数据结构:利用递推式计算next表
next 表是 KMP 算法的核心内容,下面介绍一种计算 next 表的方法:利用递推式计算 如图 6.3.1 所示,在某一趟匹配中,当对比到最后一个字符的时候,发现匹配失败(s[i] ≠ t[j])。根据 BF 算法&…...
Git操作
1 git init 项目初始化(init)成仓库 2、git add 管理文件 3、git commit -m <message> 告诉Git,把文件提交到仓库 4、git status 查看当前管理文件的状态,命令 5、git log 查看提交(commit)的…...
什么是快重传
原理: 在TCP连接中,接受方会对收到的数据包发送确认(ACK)。如果接受方收到一个乱序的数据包(即期望的下一个数据包尚未到达),它会重复发送对上一个已成功接受的数据包的确认。 当发送方连续收…...
计算机网络——物理层设备
目录 编辑 中继器 集线器(Hub) 集线器,中继器的一些特性 集线器和中继器不能“无限串联” 集线器连接的网络,物理上是星型拓扑,逻辑上是总线型拓扑 集线器连接的各网段会“共享带宽” 中继器 如果我们想要网络…...
CSS 预处理器
在面试中回答关于 CSS 预处理器的问题时,你可以从以下几个方面进行回答,展示你的知识深度和实践经验: 1. 什么是 CSS 预处理器? 你可以从定义和目的入手: “CSS 预处理器是一种扩展 CSS 功能的工具,它允许…...
解锁智能制造新体验:兰亭妙微 UE/UI 设计赋能行业变革
在智能制造时代的滚滚浪潮中,企业的数字化转型不仅是技术的革新,更是用户体验与交互界面的全面升级。然而,许多制造企业在这一转型过程中,面临着一系列 UI/UE 设计难题,严重阻碍了企业的数字化发展进程。兰亭妙微凭借专…...
计算机网络高频(三)UDP基础
计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…...
Oracle数据库服务器地址变更与监听配置修改完整指南
一、前言 在企业IT运维中,Oracle数据库服务器地址变更是常见的运维操作。本文将详细介绍如何安全、高效地完成Oracle数据库服务器地址变更及相关的监听配置修改工作,确保数据库服务在迁移后能够正常运行。 二、准备工作 1. 环境检查 确认新旧服务器I…...
获取1688.item_password接口:解析淘口令真实URL
一、接口介绍 1688的item_password接口主要用于将1688平台的淘口令短链接转换为实际商品链接。它基于1688平台的后台数据和规则,对用户传入的淘口令进行解析和验证,通过相应的算法和数据匹配,找到对应的商品信息,并生成可直接访问…...
计算机网络的分类及其性能指标
一. 计算机网络的分类 1. 按分布范围分类 广域网(WAN) 也称远程网。广域网提供长距离通信,通常是几十千米到几千千米的区域,比如跨国通信。连接广域网的各结点交换机的链路一般是高速链路,具有较大的通信容量城域网&…...
Redis原理:watch命令
在前面的文章中有提到,在multi 前可以通过watch 来观察哪些key,被观察的这些key,会被redis服务器监控,涉及该key被修改时,则在exec 命令执行过程中会被识别出来,exec 就不会再执行命令。 源码分析 // 监控…...
微服务中的服务发现与注册中心
在微服务架构中,服务实例的数量可能随着流量负载自动扩展或缩减,因此服务之间如何高效地进行通信成为一个重要问题。本篇博客将介绍服务发现的概念,并结合 Consul 和 自定义注册中心 进行实践,帮助开发者在微服务架构下高效管理服…...
Flutter网络请求封装:高效、灵活、易用的Dio工具类
在Flutter开发中,网络请求是必不可少的功能。为了简化代码、提高开发效率,我们通常会封装一个网络请求工具类。本文基于Dio库,详细介绍如何封装一个高效、灵活、易用的网络请求工具类,支持以下功能: 单例模式…...
Axure项目实战:智慧城市APP(三)教育查询(显示与隐藏交互)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:教育查询 主要内容:教育公告信息,小升初、初升高、高考成绩查询;教育公告信息为传统的信息页面,小升…...
案例实践 | 招商局集团以长安链构建“基于DID的航运贸易数据资产目录链”
概览 案例名称 基于DID的航运贸易数据资产目录链 业主单位 招商局集团 上线时间 2024年10月 用户群体 供数用数企业和个人 用户规模 集团内20企业 案例背景 招商局集团深入落实“促进数据高效流通使用、赋能实体经济”精神,深化集团数字化水平,…...
计算机网络入门:物理层与数据链路层详解
🌐 (专业解析 中学生也能懂!) 📖 前言 计算机网络就像数字世界的“高速公路系统”,而物理层和数据链路层是这条公路的基石。本文用 专业视角 和 生活化比喻 ,带你轻松理解这两层的核心原理&a…...
使用 Docker 部署 RabbitMQ 的详细指南
使用 Docker 部署 RabbitMQ 的详细指南 在现代应用程序开发中,消息队列系统是不可或缺的一部分。RabbitMQ 是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。本文将详细介绍如何使用 Docker 部署 RabbitMQ…...
数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素
数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了,调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…...
如何用 Postman 发送 POST 请求?
POST 请求是 HTTP 协议中用于提交数据的一种方法,Postman 提供了丰富的功能来支持用户发送包含各种信息的 POST 请求,如文本数据、JSON 或 XML 数据结构、文件等。 Postman 发送 post 请求教程...
基于Spring Boot的网上商城系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
mysql中的聚簇索引,什么是聚簇索引和非聚簇索引
文章目录 1. 什么是聚簇索引2. 非聚簇索引3. 聚簇索引的优缺点4. 聚簇索引的使用场景5. 聚簇索引和主键索引的异同前言: 在继续讲解专栏内容之前,先学习几个概念,以便更好了解: 什么是聚簇索引什么是回表这篇文章详细分析 聚簇索引。回表的理解可以进入这篇文章:什么是回表…...
涨薪技术|使用Dockerfile创建镜像
上次的推文内容中介绍了如何使用docker commit的方法来构建镜像,相反推荐使用被称为Dockerfile的定义文件和docker build命令来构建镜像。Dockerfile使用基本的基于DSL语法的指令来构建一个Docker镜像,之后使用docker build命令基于该Dockerfile中的指令…...
OpenFeign在微服务中的远程服务调用工作流程
OpenFeign作为声明式的HTTP客户端,在微服务架构中的远程调用工作流程可分为以下标准步骤: 一、初始化阶段 1. 接口定义(声明式API) @FeignClient(name = "user-service", path = "/api/users") public interface UserServiceClient {@GetMapping(&q…...