当前位置: 首页 > news >正文

Spring Boot整合Camunda打造高效工作流程

🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚
👉点击这里,就可以查看我的主页啦!👇👇
尘缘的个人主页
🎁如果感觉还不错的话请给我点赞吧!🎁🎁
💖期待你的加入,一起学习,一起进步!💖💖

在这里插入图片描述

目录

  • 1 Spring Boot和Camunda的基本介绍
    • 1.1 Spring Boot的特点和优势
    • 1.2 Camunda的特点和优势
    • 1.3 工作流的基本概念和重要性
  • 2 环境搭建
    • 2.1 Spring Boot的环境搭建
    • 2.2 Camunda的环境搭建
    • 2.3 Spring Boot和Camunda的整合步骤
  • 3 实现工作流
    • 3.1 设计工作流模型
    • 3.2 定义工作流任务
    • 3.3 实现工作流引擎
    • 3.4 工作流的启动和控制
  • 4 实例演示
    • 4.1 创建一个简单的工作流示例
    • 4.2 通过Spring Boot启动工作流
    • 4.3 监控和管理工作流运行状态
      • 4.3.1 使用Camunda Modeler
      • 4.3.2 使用Spring Actuator
      • 4.3.3 使用Camunda Cockpit
  • 5 高级特性
    • 5.1 工作流的并行和分支处理
    • 5.2 工作流的异常处理和补偿机制
    • 5.3 工作流的性能优化和扩展

在现代的软件开发中,工作流管理是一个重要的组成部分。它能够帮助更好地管理和控制业务流程,提高业务效率和质量。Spring Boot是一个流行的Java开发框架,而Camunda是一个强大的工作流引擎。将Spring Boot与Camunda整合,可以实现高效、灵活且易于管理的工作流系统。

在本文中,将介绍如何使用Spring Boot和Camunda来创建和管理工作流程。将从基本的环境搭建开始,然后逐步深入到工作流的设计和实现,最后通过实例演示如何启动和控制工作流。

1 Spring Boot和Camunda的基本介绍

1.1 Spring Boot的特点和优势

Spring Boot是一种基于Spring框架的开源Java开发框架,旨在简化新Spring应用的初始搭建以及开发过程。它通过提供一系列快速开发的工具和功能,使得开发者能够更加高效地构建和部署应用。

Spring Boot的主要特点和优势包括:

  • 简化配置:采用约定优于配置的理念,提供大量默认配置,大大减少了开发者的配置工作量。
  • 自动化管理:自动引入所需的依赖库,避免了手动管理依赖的繁琐。
  • 内嵌服务器:可以内嵌Tomcat、Jetty等服务器,无需单独部署应用,简化了应用的部署和管理。
  • 丰富的生态:与Spring生态系统完美集成,可以利用Spring提供的丰富功能和扩展性。
  • 快速构建:提供了许多快速构建项目的工具和模板,可以快速搭建和启动新的应用。

这些特点和优势使得Spring Boot成为现代Java开发的首选框架之一,特别适合于快速开发、微服务架构和云原生应用等场景。

1.2 Camunda的特点和优势

Camunda是一个开源的工作流引擎,专为企业级工作流管理和自动化而设计。以下是Camunda的一些特点和优势:

  • 强大的工作流定义:Camunda提供了符合BPMN(Business Process Model and Notation)标准的工作流定义语言,能够清晰描述复杂的业务流程。
  • 易于集成:可以轻松与现有系统整合,支持各种数据源、应用和平台的接口。
  • 可扩展性:提供丰富的API,允许开发者定制和扩展功能,满足特定业务需求。
  • 高性能执行:优化的引擎性能确保流程可高效运行,即使是在高负载环境下。
  • 可视化管理与监控:内置的管理工具可以实现流程的实时监控,同时提供直观的界面来管理流程实例。

Camunda的这些特性使其成为实现业务流程自动化的强大工具,特别适合需要高度灵活性和控制力的应用场景。

1.3 工作流的基本概念和重要性

工作流是一系列按照特定顺序组织的任务,用于完成特定的业务目标。工作流通常涉及多个参与者,包括人、系统或组织。工作流的主要目标是提高效率、减少错误并提供更好的控制和可见性。

工作流的重要性主要体现在以下几个方面:

  • 提高效率:通过自动化和优化工作流程,可以减少不必要的步骤和等待时间,提高工作效率。
  • 减少错误:工作流可以明确每个任务的执行者和执行条件,减少人为错误和遗漏。
  • 提供控制和可见性:工作流可以清晰地展示业务的执行情况,提供实时的监控和管理。
  • 灵活性和适应性:工作流可以根据业务的变化进行调整和优化,适应不同的业务需求和环境。

通过对Spring Boot和Camunda的了解,以及对工作流的基本认识,可以更好地理解如何利用这两个技术来创建和管理工作流程。接下来,将进入环境搭建的阶段,为后续的工作流设计和实现做好准备。

2 环境搭建

在进行Spring Boot与Camunda的整合之前,需要首先搭建好各自的开发环境。以下是分别针对Spring Boot和Camunda的环境搭建步骤,以及它们整合的具体操作。

2.1 Spring Boot的环境搭建

  1. 确保Java环境:安装Java Development Kit (JDK),因为Spring Boot应用需要Java运行环境。

  2. 选择IDE:选择喜爱的集成开发环境(IDE),如IntelliJ IDEA、Eclipse等。

  3. 创建项目:在IDE中创建一个新的Spring Boot项目。许多IDE都提供了创建Spring Boot项目的模板。

  4. 配置依赖:在项目的构建文件(如pom.xml或build.gradle)中添加必要的依赖项。Spring Boot Starter Web是一个常用的依赖,它包括了构建web应用所需的所有基本组件。

  5. 开发应用:编写的Spring Boot应用程序代码。Spring Boot自动配置特性将简化大部分的配置工作。

  6. 运行应用:通过IDE或者命令行工具运行Spring Boot应用。通常,一个简单的mvn spring-boot:rungradle bootRun命令就可以启动应用。

  7. 测试:利用Spring Boot内嵌的Tomcat服务器,可以方便地测试的应用。

2.2 Camunda的环境搭建

  1. 下载Camunda BPM:访问Camunda的官方下载页面(https://camunda.com/download/),选择一个适合的版本进行下载。解压下载的zip或tar包以安装Camunda BPM平台。
  2. 安装Java开发工具包(JDK):确保的计算机上安装了OpenJDK 8或更高版本。如果计划在Windows操作系统上安装,推荐使用64位版本,并保证有足够的内存,例如16GB。
  3. 配置Camunda环境:编辑Camunda的配置文件,如camunda.cfg,设置数据库连接和其他相关配置。
  4. 部署流程定义:使用Camunda Modeler设计工具来创建和编辑BPMN图表,并将这些流程定义部署到Camunda引擎中。
  5. 启动Camunda引擎:完成配置后,启动Camunda服务,这将启动流程引擎并使其开始监听流程定义和实例请求。
  6. 使用Camunda API:通过REST API或者Java API与Camunda引擎交互,管理和控制流程实例。

在整合Spring Boot和Camunda时,需要在项目的配置文件中添加Camunda的依赖项,这可以通过Maven或Gradle来完成。在Spring Boot项目中集成Camunda工作流引擎的过程需要特别注意依赖管理和配置的设置。

搭建Camunda环境的关键在于下载和安装Camunda BPM平台、确保Java环境的正确性以及配置和部署流程定义。完成这些步骤后,就可以开始在Spring Boot项目中集成和使用Camunda工作流引擎了。

2.3 Spring Boot和Camunda的整合步骤

整合Spring Boot和Camunda的步骤通常如下:

  1. 添加Camunda依赖:在Spring Boot项目的构建文件中加入Camunda的Starter依赖。

  2. 配置数据源:在Spring Boot的配置文件中(如application.properties或application.yml),配置数据源信息以连接到Camunda使用的数据库。

  3. 创建流程引擎配置:可能需要创建一个配置类,用于产生和配置Camunda的流程引擎Bean。

  4. 流程定义部署:可以在Spring Boot应用启动时自动部署流程定义到Camunda引擎中。

  5. 流程服务的集成:通过注入Camunda的引擎服务,可以在Spring管理的bean中使用流程服务。

  6. 业务逻辑实现:在Spring应用中实现具体的业务逻辑,并通过Camunda的API来管理流程。

  7. 测试和调试:运行Spring Boot应用,并通过各种测试工具进行功能和流程的测试。

完成以上步骤后,就拥有了一个整合了Spring Boot和Camunda的工作环境,接下来可以进行更复杂的流程设计和实现了。

3 实现工作流

3.1 设计工作流模型

在实现工作流之前,需要设计一个合适的工作流模型。工作流模型描述了工作流程中的活动、任务和它们之间的关系。

开始
条件判断
执行任务1
执行任务2
结束

定义了一个简单的工作流模型,包括开始、条件判断、执行任务1、执行任务2和结束等节点。根据条件判断的结果,工作流将执行不同的任务,并在完成后结束。

3.2 定义工作流任务

在设计好工作流模型后,需要为每个任务定义具体的操作。这些操作可以是函数、方法或服务调用等。以下是一个简单的Python代码,演示如何定义工作流任务:

def execute_task1():# 执行任务1的代码逻辑passdef execute_task2():# 执行任务2的代码逻辑passdef condition_check():# 条件判断的逻辑,返回True或Falsereturn Truedef workflow():if condition_check():execute_task1()else:execute_task2()workflow()

在这个示例中,定义了三个函数:execute_task1execute_task2condition_checkexecute_task1execute_task2分别表示执行任务1和任务2的具体操作。condition_check用于进行条件判断,返回True或False。最后,定义了一个workflow函数来组织整个工作流程,根据条件判断的结果执行相应的任务。

3.3 实现工作流引擎

实现一个工作流引擎通常涉及以下几个关键步骤:

  1. 定义流程模板:首先需要定义流程模板,这是描述工作流程结构和内容的基础。流程模板可以包含多种类型的节点,如开始节点、结束节点、任务节点等,以及它们之间的连接关系。
  2. 流程引擎的数据库设计:为了确保工作流引擎的通用性,流程数据和业务数据应该相分离。流程引擎相关的表负责记录流程的跳转和走向,而业务表单数据和附件则存储在业务表中。两者之间通过流程实例ID (processInstanceId) 和业务数据主键相互关联。
  3. 选择或开发工作流引擎:可以选择现有的工作流引擎框架,如Activiti,它支持使用BPMN2.0建模语言定义业务流程,并按照预定义的流程执行。这样可以减少因流程变更而导致的系统升级改造工作量。
  4. 实现流程控制逻辑:包括简单顺序流程、条件流程、分支/合并流程等。在条件流程中,决策节点的输出边可能包含表达式,流程将向表达式值为true的方向行进。在分支/合并流程中,分支与合并要成对出现,由合并节点判断是否具备合并条件。
  5. 提供用户界面:为用户提供一个界面来管理和监控工作流程的执行状态,以及进行流程的启动、审批等操作。
  6. 测试和优化:在实现完成后,需要进行全面的测试以确保工作流引擎的稳定性和可靠性。根据测试结果进行必要的优化。

3.4 工作流的启动和控制

一旦工作流引擎实现完成,可以通过以下方式启动和控制工作流程:

  1. 启动工作流程:用户可以通过用户界面或API调用来启动一个工作流程。这通常涉及到创建一个流程实例,并将其加入到流程引擎中。
  2. 执行任务:工作流引擎会根据流程定义自动推进流程,用户需要在适当的时机执行他们的任务,例如填写表单、审批请求等。
  3. 流程监控和管理:管理员可以通过管理界面监控工作流程的状态,并在必要时进行干预,如暂停、取消或重新分配任务。
  4. 日志和审计:记录工作流程的历史记录,以便进行审计和问题追踪。

通过这些步骤,可以实现一个完整的工作流引擎,并通过有效的控制机制来管理和执行复杂的业务流程。

4 实例演示

4.1 创建一个简单的工作流示例

让创建一个简单的工作流,包括两个任务:TaskATaskB。这个工作流将按照以下顺序执行这两个任务:

  1. 开始节点
  2. TaskA
  3. TaskB
  4. 结束节点

可以使用BPMN2.0建模语言来定义这个工作流。以下是一个简单的BPMN2.0文件:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"targetNamespace="http://example.com/workflow"><process id="simpleWorkflow" name="Simple Workflow"><startEvent id="start" /><sequenceFlow id="flow1" sourceRef="start" targetRef="taskA" /><userTask id="taskA" name="Task A" /><sequenceFlow id="flow2" sourceRef="taskA" targetRef="taskB" /><userTask id="taskB" name="Task B" /><sequenceFlow id="flow3" sourceRef="taskB" targetRef="end" /><endEvent id="end" /></process></definitions>

4.2 通过Spring Boot启动工作流

要在Spring Boot应用程序中启动这个工作流,需要进行以下步骤:

  1. 添加必要的依赖项:在项目的pom.xml文件中添加Camunda和Spring Boot相关的依赖项。例如:
<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Camunda Spring Boot Starter --><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter</artifactId><version>7.15.0</version></dependency>
</dependencies>
  1. 配置工作流引擎:在Spring Boot的配置文件(如application.properties)中配置工作流引擎的相关参数,例如数据库连接信息、流程文件路径等。例如:
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/camunda?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password# 配置流程文件路径
camunda.bpm.deployment-resource=classpath:/processes/*.bpmn20.xml
  1. 启动Spring Boot应用程序:运行Spring Boot应用程序的主类,它将自动加载并启动工作流引擎。

  2. 部署和启动工作流实例:使用Camunda提供的API或用户界面,部署和启动工作流实例。例如,可以使用REST API发送POST请求到/engine-rest/deployment/create接口来部署流程文件,然后使用POST请求到/engine-rest/process-definition/key/{processDefinitionKey}/start接口来启动工作流实例。

通过这些步骤,可以在Spring Boot应用程序中成功启动和控制工作流。请确保根据实际需求进行适当的配置和调整。

4.3 监控和管理工作流运行状态

在Spring Boot和Camunda整合的环境中,监控和管理工作流运行状态可以通过多种方式实现。以下是一些关键步骤和方法来管理和监控工作流:

4.3.1 使用Camunda Modeler

  1. 使用Camunda Modeler进行流程设计:Camunda Modeler是一个基于Web的流程设计工具,可以用于创建、编辑和管理BPMN图表。通过这个工具,可以可视化地定义和修改工作流。

  2. 部署流程定义:将设计好的BPMN图表部署到Camunda引擎中,生成流程定义(Process Definition)。

  3. 启动流程实例:通过API或Modeler界面启动具体的流程实例。

  4. 访问查询和报告:Camunda提供了REST API,可以用来查询流程实例的状态、任务、变量等信息。例如,可以使用GET /engine-rest/process-instance来获取所有流程实例的信息。

  5. 任务管理:通过API或用户界面处理任务,比如领取任务、完成任务等。

  6. 事件订阅:Camunda支持事件订阅机制,允许在工作流中的特定事件发生时执行自定义逻辑。

  7. 审计和历史数据:Camunda记录了所有的操作和状态变化,可以通过API访问这些历史数据来进行审计和分析。

4.3.2 使用Spring Actuator

  1. 集成Spring Actuator:在Spring Boot项目中添加Spring Actuator依赖,以获得生产级的监控和管理功能。

  2. 配置端点:通过配置文件开启和管理各种Actuator端点,如健康检查、环境信息、应用信息等。

  3. 使用/actuator/camunda端点:Camunda为Spring Actuator提供了专门的端点来监控和管理Camunda流程引擎。可以通过/actuator/camunda来访问这些信息。

  4. 查看流程状态:使用/actuator/camunda/process-instances来获取所有流程实例的状态。

  5. 任务管理:使用/actuator/camunda/tasks来管理和查询任务。

  6. 性能指标:Spring Actuator提供了详细的性能指标收集,可以使用/actuator/metrics来访问这些指标。

4.3.3 使用Camunda Cockpit

  1. 部署Camunda Cockpit:Camunda Cockpit是一个独立的Web应用程序,用于实时监控和管理Camunda引擎。

  2. 连接Cockpit到Camunda引擎:通过配置Cockpit连接到的Camunda引擎。

  3. 实时监控:使用Cockpit的仪表板和报表功能来实时监控流程实例、任务、性能等。

  4. 管理任务:Cockpit提供了一个用户友好的界面来管理任务,包括领取、办理和完成任务。

  5. 审计和历史数据:Cockpit也提供了对历史数据的访问,用于审计和分析。

通过上述方法,可以在Spring Boot和Camunda整合的环境中有效地监控和管理工作流的运行状态。这些工具和接口提供了强大的功能,可以帮助确保工作流的正确执行,并在出现问题时快速定位和解决。

5 高级特性

5.1 工作流的并行和分支处理

Camunda工作流引擎提供了强大的并行和分支处理能力,使得复杂的业务流程可以得到有效的执行和管理。以下是一些关键点:

  • 并行网关:在BPMN 2.0中,并行网关(Parallel Gateway)用于创建并行执行的流程路径。当流程到达并行网关时,它会同时触发多个后续步骤或任务,这些步骤可以独立于彼此并行执行。
  • 分支和合并:分支(Split)和合并(Join)用于控制流程的执行路径。分支节点可以将流程分成多个独立的路径,而合并节点则确保所有路径都已完成,流程才能继续向前推进。
  • 多实例处理:Camunda支持多实例(Multi Instance)处理,这允许同时处理多个相似的任务或活动。这对于批量处理或需要并发处理多个相似对象的场景非常有用。
  • 条件表达式:通过使用条件表达式,可以在流程中实现基于特定条件的动态路由决策。这使得流程可以根据运行时的数据或状态来选择不同的执行路径。

5.2 工作流的异常处理和补偿机制

在工作流管理中,异常处理和补偿机制是确保业务连续性和数据一致性的关键。以下是Camunda在这方面提供的功能:

  • 异常捕获:Camunda允许在BPMN模型中定义异常捕获机制,以便在出现错误或异常时能够适当地响应。可以通过定义错误边界事件(Error Boundary Events)来捕获特定活动的异常,并将流程引导到特定的错误处理流程。
  • 补偿事务:为了处理可能的业务事务失败,Camunda支持补偿事务的概念。补偿事务是在原始事务失败时执行的一组操作,用于撤销或回滚先前的操作,以保持数据的一致性。
  • 事务管理:Camunda流程引擎内置了对事务的支持,确保了流程中的多个步骤可以作为一个整体进行提交或回滚。这对于维护数据完整性和处理复杂业务流程至关重要。
  • 事件处理:Camunda还提供了对事件的支持,允许在特定事件发生时触发补偿操作或其他响应措施。这为异常处理提供了更多的灵活性和动态性。

通过这些高级特性,Camunda能够支持复杂的业务流程需求,并提供强大的工具和框架来实现流程的自动化、监控和管理。

5.3 工作流的性能优化和扩展

性能优化和系统扩展是确保工作流引擎能够高效、稳定地运行,同时满足不断增长的业务需求的关键。以下是一些针对Camunda工作流引擎的性能优化和扩展策略:

性能优化

  1. 资源调整:首先,确保为Camunda引擎分配了足够的硬件资源,包括CPU、内存和存储空间,以处理流程定义、实例和相关数据。

  2. 数据库优化:数据库是工作流管理系统的核心组成部分。优化数据库配置,如索引设计、查询优化和适当的缓存策略,可以显著提高性能。

  3. 批处理和异步处理:对于大量数据处理或长时间运行的任务,使用批处理和异步处理技术可以减少对工作流引擎的直接压力。

  4. 负载均衡:在高并发场景下,使用负载均衡器将请求分散到多个Camunda引擎实例,可以提高整体的处理能力和可靠性。

  5. 流程优化:简化和优化BPMN流程模型,减少不必要的复杂性,避免过多的嵌套和循环,可以提高流程的执行效率。

  6. 缓存:适当使用缓存来存储频繁访问的数据,如用户信息、常用配置等,可以减少对数据库的访问次数。

  7. 监控和分析:使用监控工具(如Camunda Cockpit、Spring Actuator)来收集性能指标,定期分析这些数据以识别瓶颈和优化点。

扩展

  1. 集群部署:通过部署Camunda集群来提高系统的可用性和伸缩性。集群部署可以在不同的服务器上分布负载,并在一台服务器出现故障时提供备份。

  2. 插件和扩展:Camunda提供了丰富的插件机制,允许根据需要添加自定义功能或集成第三方服务。

  3. 事件和API扩展:利用Camunda的事件订阅机制和开放的API接口,可以扩展工作流的功能,如添加自定义事件处理、集成其他系统等。

  4. 多引擎协同:在大型组织中,可能需要多个工作流引擎协同工作。通过适当的设计和配置,可以实现不同引擎之间的协作和数据交换。

  5. 弹性扩展:在云环境中,可以使用弹性扩展技术(如自动伸缩组)来根据实际负载动态调整资源。

通过上述性能优化和扩展策略,可以确保Camunda工作流引擎能够满足不同规模和复杂度的业务需求,同时保持高效、稳定的运行。

在这里插入图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!
💖如果觉得有用的话还请点个赞吧 💖

相关文章:

Spring Boot整合Camunda打造高效工作流程

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…...

2.8、下拉刷新与上拉加载

页面的下拉刷新与上拉加载功能在移动应用中十分常见,例如,新闻页面的内容刷新和加载。这两种操作的原理都是通过响应用户的触摸事件,在顶部或者底部显示一个刷新或加载视图,完成后再将此视图隐藏。 实现思路 以下拉刷新为例,其实现主要分成三步: 监听手指按下事件,记录…...

java Web餐馆订单管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 餐馆订单管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使…...

小程序从入门到入坑:事件系统

前言 哈喽大家好&#xff0c;我是 SuperYing&#xff0c;本文是小程序从入门到入坑系列的第 3 篇&#xff0c;将比较详尽的讲解 小程序事件系统 的相关知识点&#xff0c;欢迎小伙伴阅读。 读完本文您将收获&#xff1a; 了解小程序事件及基础使用。了解小程序事件分类及多种的…...

Windows蓝牙驱动开发之模拟HID设备(二)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)

by fanxiushu 2024-03-24 转载或引用请注明原作者 接上文,当我们建立了蓝牙链接请求之后,就该传输数据了, 其实传输数据比起上章阐述的创建SDP和建立连接要简单许多。 使用类型 BRB_L2CA_ACL_TRANSFER 的BRB请求,就可以实现接收和发送操作, 至于具体是接收还是发送,根据设…...

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念

快速区分清楚图形渲染中的AABB&#xff0c;KD树和BVH这些概念 主要想形象去区分好这些术语&#xff0c;目的是扫盲&#xff0c;先开好坑&#xff0c;内容持续填充。 0.先摆出这些词的全称 AABB&#xff1a; 原名&#xff1a;axis aligned bounding box&#xff1b;中文直译名…...

Rust 的 HashMap 特定键值元素值的累加方法

在Rust中&#xff0c;如果你想要对HashMap中特定键对应的值进行累加操作&#xff0c;你需要首先检查该键是否已存在。如果存在&#xff0c;则取出其值&#xff0c;进行累加&#xff0c;然后将结果存回HashMap。如果不存在&#xff0c;则可能需要插入一个新的键值对&#xff0c;…...

Java后端项目性能优化实战-群发通知

背景 公司群发通知模块性能存在问题&#xff0c;我进行全面的系统调优&#xff0c;系统处理能力大幅提升。 原发送流程 优化后的发送流程 优化的点 说明&#xff1a;以下问题基本都是压测过程遇到的&#xff0c;有些问题普通的功能测试暴露不了。优化目标&#xff1a;保证高…...

5、Jenkins持续集成-Maven和Tomcat的安装与配置

文章目录 一、Maven的安装与配置1、安装maven并配置环境2、全局工具配置关联jdk和maven3、添加Jenkins全局变量4、修改settings.xml文件5、测试是否配置成功二、Tomcat的安装与配置1、安装tomcat8+2、配置Tomcat用户角色权限3、测试是否配置成功一、Maven的安装与配置 在Jenki…...

Qt教程 — 3.7 深入了解Qt 控件: Layouts部件

目录 2 如何使用Layouts部件 2.1 QBoxLayout组件-垂直或水平布局 2.2 QGridLayout组件-网格布局 2.3 QFormLayout组件-表单布局 在Qt中&#xff0c;布局管理器&#xff08;Layouts&#xff09;是用来管理窗口中控件位置和大小的重要工具。布局管理器可以确保窗口中的控件在…...

自动驾驶的几种名词

1. 自适应巡航控制&#xff08;ACC&#xff09; 自适应巡航控制&#xff08;Adaptive Cruise Control&#xff0c;ACC&#xff09;是一种汽车驾驶辅助系统&#xff0c;它可以根据前方车辆的速度和距离自动调整车辆的速度&#xff0c;以保持与前车的安全距离。ACC系统由控制层和…...

华为全套企业管理资料合集(21专题)

华为全套企业管理资料合集-知识星球下载 1.绩效考核 华为内训绝密资料:绩效管理与绩效考核.ppt 华为绩效管理与绩效考核制度.docx 华为公司实用性各种绩效图表汇总.doc 华为公司考勤管理制度.doc 华为IPD模式中跨部门团队成员的考核激励制度.doc 2.企业管理 华为公司人力资源…...

LeetCode Python - 74. 搜索二维矩阵

目录 题目描述解法方法一&#xff1a;二分查找方法二&#xff1a;从左下角或右上角搜索 运行结果方法一方法二 题目描述 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给…...

如何安全地添加液氮到液氮罐中

液氮是一种极低温的液体&#xff0c;它在许多领域广泛应用&#xff0c;但在处理液氮时需谨慎小心。添加液氮到液氮罐中是一个常见的操作&#xff0c;需要遵循一些安全准则以确保操作人员的安全和设备的完整性。 选择合适的液氮容器 选用专业设计用于存储液氮的容器至关重要。…...

LGBM算法 原理

简介 GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型&#xff0c;其主要思想是利用弱分类器&#xff08;决策树&#xff09;迭代训练以得到最优模型&#xff0c;该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界应用广泛&#xff0c;通常被…...

【WPF应用5】WPF中的TextBlock控件:属性与事件详解及示例

在WPF&#xff08;Windows Presentation Foundation&#xff09;开发中&#xff0c;TextBlock控件是一个常用的元素&#xff0c;用于显示静态或动态文本内容。它提供了丰富的属性和事件&#xff0c;使得开发者能够灵活地控制文本的显示样式和响应用户的交互行为。本文将详细介绍…...

【C语言基础】:内存操作函数

文章目录 一、memcpy函数的使用和模拟实现1.1 memcpy函数的使用1.2 memcpy函数的模拟实现 二、memmove函数的使用和模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现 三、memset函数的使用3.1 menset函数的使用 四、memcmp函数的使用4.1 memcmp函数的使用 学海无涯苦作…...

3.24作业

基于UDP的网络聊天室 项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器端代码 #in…...

Excel双击单元格后弹窗输入日期

Step1. 在VBE界面新建一个窗体(Userform1),在窗体的工具箱的空白处右键,选中添加附件,勾选Calendar control 8.0,即可完成日历的添加。 PS:遗憾的是, Office 64 位没有官方的日期选择器控件。唯一的解决方案是使用Excel 的第三方日历。 参考链接:How to insert calen…...

原生 HTML/CSS/JS 实现右键菜单和二级菜单

文章来源&#xff1a;www.huhailong.vip 站点 文章源地址&#xff1a;https://www.huhailong.vip/article/1764653112011841538 Demo效果演示地址 先看效果图 {{{width“auto” height“auto”}}} 需要注意的就是边界检测处理&#xff0c;到极端点击底部和右侧时如果不做处理会…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...