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

springboot集成camunda学习与使用

springboot集成camunda学习与使用.md

  • 0、前言
  • 一、Spring Boot 集成camunda流程引擎
    • 1.新建全新的springboot工程
    • 2.添加pom.xml依赖
    • 3.启动Spring Boot工程
    • 4.切换成mysql数据库
    • 5.设计并部署一个BPMN流程
    • 6.camunda流程引擎测试
      • 6.1 通过camunda web控制台测试
      • 6.2 通过camunda rest接口测试
      • 6.3 通过Java API接口测试
  • 二、自建BPMN Web Modeler


0、前言

Camunda是一款开源的业务流程管理(BPM)平台,旨在帮助企业自动化和优化他们的业务流程。Camunda的核心功能包括流程设计、执行和监控,支持BPMN(业务流程模型与标注)、CMMN(案例管理模型与标注)和DMN(决策模型与标注)等标准。

一、Spring Boot 集成camunda流程引擎

本文内容参考此文总结得出:https://blog.csdn.net/wxz258/article/details/136279524

1.新建全新的springboot工程

新建一个springboot工程,springboot版本为2.7.18,jdk版本1.8,过程略。

2.添加pom.xml依赖

为新项目设置 Maven 依赖项。需要将 Maven 依赖添加到项目,添加后支持camunda流程引擎、web界面、Rest服务接口,导入camunda-bpm-spring-boot-starter-rest、camunda-bpm-spring-boot-starter-webapp依赖包。导入后自动将camunda 引擎、rest服务接口和 Web应用程序包含在springboot工程。

使用camunda7.19.0版本,该版本支持jdk8和springboot2。camunda和springboot版本的依赖对应关系,查看官方文档说明:Spring Boot Version Compatibility | docs.camunda.org

  • pom.xml增加依赖
		<!-- camunda start --><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId><version>${camunda.spring-boot.version}</version></dependency><dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boot-starter-rest</artifactId><version>${camunda.spring-boot.version}</version></dependency><!-- camunda end --><!-- spring jdbc start --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- spring jdbc end --><!-- h2database start --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId></dependency><!-- h2database end -->

注:需要添加spring-boot-starter-jdbc依赖,否则会报Field transactionManager in org.camunda.bpm.spring.boot.starter.configuration.impl.DefaultDatasourceConfiguration required a bean of type ‘org.springframework.transaction.PlatformTransactionManager’ that could not be found.

  • application.yml中增加配置
spring:datasource:url: jdbc:h2:mem:camunda;DB_CLOSE_DELAY=1000;LOCK_TIMEOUT=10000username: sapassword:driver-class-name: org.h2.Driver
camunda:bpm:database:type: h2 #可改成 mysqlschema-update: trueauto-deployment-enabled: false # 自动部署 resources 下的 bpmn文件admin-user:id: demopassword: demo

3.启动Spring Boot工程

以上增加依赖后,就可以基于内存数据库(h2)在本地启动好camunda流程引擎了,启动后,在浏览器中打开 http://localhost:8080/ 时,您可以使用我们之前配置的登录名和密码"demo/demo"来访问 Camunda Web应用程序,能做到下面效果说明成功。

在这里插入图片描述

在这里插入图片描述

4.切换成mysql数据库

如果camunda要在生产环境中使用,不太可能是直接使用h2数据库的,camunda本身对mysql的支持性也相当好,因此需要改造一下切换成使用mysql.

其他数据库的支持情况见:https://docs.camunda.org/manual/7.19/introduction/supported-environments/#databases

在这里插入图片描述

  • pom.xml增加mysql依赖
		<!-- mysql driver start --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!-- mysql driver end -->
  • application.yml中修改
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/camundatest?characterEncoding=UTF-8&useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
camunda:bpm:database:type: mysqlschema-update: false # 是否自动建表,但我测试为true时,创建表会出现,因此还是改成false由手工建表。auto-deployment-enabled: false # 自动部署 resources 下的 bpmn文件admin-user:id: demopassword: demo
  • mysql中创建数据库camundatest
create database camundatest;
  • 生成数据库表

使用schma-update:true后,启动工程也不会完全生成完整的mysql表,原因不明,因此还是采用手工执行数据库脚本的方式来建表。

Sql建表语句位置:找到maven依赖,org\camunda\bpm\camunda-engine\7.19.0\camunda-engine-7.19.0.jar,org.camunda.bpm.engine.db.create包下面。

在这里插入图片描述

/org/camunda/bpm/engine/db/create/activiti.mysql.create.case.engine.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.case.history.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.decision.engine.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.decision.history.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.engine.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.history.sql
/org/camunda/bpm/engine/db/create/activiti.mysql.create.identity.sql

使用navicat或其他工具依次执行完。注:我测试的时候其中activiti.mysql.create.case.engine.sql有部分sql执行报错,提示重复创建之类的,那就把报错的sql一一删除再执行完。

最后得到49张表.

在这里插入图片描述

最后再执行一下springboot工程重启成功。再一次进行http://localhost:8080测试,输入demo/demo能登录成功。

5.设计并部署一个BPMN流程

这里先使用windows下载安装的流程设计器进行一个流程设计与测试,后面章面再说明如果通过web构建一个浏览器形式的在线流程设计器。

  • 下载安装流程设计器

windows版本下载地址:https://downloads.camunda.cloud/release/camunda-modeler/5.19.0/camunda-modeler-5.19.0-win-x64.zip

下载后得到一个zip,解压后即可运行Camunda Modeler.exe使用。

  • 设计BPMN流程

在这里插入图片描述

在这里插入图片描述

点击后会提示保存xml,然后出现以下弹窗,配置好REST endpoint,然后点Deploy即可发布成功。

在这里插入图片描述

发布成功后会在act_ge_bytearray,act_re_deployment表中生成对应的数据

在这里插入图片描述

6.camunda流程引擎测试

6.1 通过camunda web控制台测试

现在,当您在浏览器中打开 http://localhost:8080/camunda/app/tasklist/ 时,您可以使用我们之前配置的登录名和密码“demo/demo”来访问 Camunda Web 应用程序。

可以点击Start process进行流程的启动

在这里插入图片描述

Start process后:act_hi_procinst表中会有新的一条流程实例数据,对应的act_ru_task和act_hi_taskinst等表均有相应的记录

在这里插入图片描述

6.2 通过camunda rest接口测试

以上我们通过camunda的web界面进行了发起流程测试验证,下面我们通过Camunda REST API的方式进行测试验证。

Camunda Platform REST API官方说明文档:https://docs.camunda.org/rest/camunda-bpm-platform/7.19/

  • 查询流程定义

GET http://{host}:{port}/{contextPath}/process-definition

# 示例
curl http://localhost:8080/engine-rest/process-definition# 输出
[{"id":"Process_0woc0aw:1:711f5f2d-5c38-11ef-9f87-e46017b79329","key":"Process_0woc0aw","category":"http://bpmn.io/schema/bpmn","description":null,"name":null,"version":1,"resource":"diagram_1.bpmn","deploymentId":"7104f95b-5c38-11ef-9f87-e46017b79329","diagram":null,"suspended":false,"tenantId":null,"versionTag":null,"historyTimeToLive":180,"startableInTasklist":true}]
  • 查询流程定义数量

GET http://{host}:{port}/{contextPath}/process-definition/count

curl http://localhost:8080/engine-rest/process-definition/count
  • 发起流程实例(流程启动)

POST http://{host}:{port}/{contextPath}/process-definition/key/{key}/start

# 示例
curl -X POST -H 'Content-Type: application/json' \-d '{"variables": {"variable1": {"value": "hello","type": "String"},"variable2": {"value": true,"type": "Boolean"}},"businessKey": "myBusinessKey-test1"}' \"http://localhost:8080/engine-rest/process-definition/key/Process_0woc0aw/start"# 输出
{"links":[{"method":"GET","href":"http://localhost:8080/engine-rest/process-instance/7aac2fb7-5c48-11ef-9f87-e46017b79329","rel":"self"}],"id":"7aac2fb7-5c48-11ef-9f87-e46017b79329","definitionId":"Process_0woc0aw:1:711f5f2d-5c38-11ef-9f87-e46017b79329","businessKey":"myBusinessKey-test1","caseInstanceId":null,"ended":false,"suspended":false,"tenantId":null}
  • 查询待办任务

GET http://{host}:{port}/{contextPath}/task

# 示例
# 查询所有待办任务
curl http://localhost:8080/engine-rest/task# 查询分配给liujh的待办任务
curl http://localhost:8080/engine-rest/task?assignee=liujh[{"id":"7aaec7ce-5c48-11ef-9f87-e46017b79329","name":"审批","assignee":"liujh","created":"2024-08-17T11:26:24.000+0800","due":null,"followUp":null,"lastUpdated":null,"delegationState":null,"description":null,"executionId":"7aac2fb7-5c48-11ef-9f87-e46017b79329","owner":null,"parentTaskId":null,"priority":50,"processDefinitionId":"Process_0woc0aw:1:711f5f2d-5c38-11ef-9f87-e46017b79329","processInstanceId":"7aac2fb7-5c48-11ef-9f87-e46017b79329","taskDefinitionKey":"Activity_0p57gxb","caseExecutionId":null,"caseInstanceId":null,"caseDefinitionId":null,"suspended":false,"formKey":null,"camundaFormRef":null,"tenantId":null},{"id":"b11eed80-5c39-11ef-9f87-e46017b79329","name":"审批","assignee":"liujh","created":"2024-08-17T09:40:33.000+0800","due":null,"followUp":null,"lastUpdated":null,"delegationState":null,"description":null,"executionId":"b1148d3d-5c39-11ef-9f87-e46017b79329","owner":null,"parentTaskId":null,"priority":50,"processDefinitionId":"Process_0woc0aw:1:711f5f2d-5c38-11ef-9f87-e46017b79329","processInstanceId":"b1148d3d-5c39-11ef-9f87-e46017b79329","taskDefinitionKey":"Activity_0p57gxb","caseExecutionId":null,"caseInstanceId":null,"caseDefinitionId":null,"suspended":false,"formKey":null,"camundaFormRef":null,"tenantId":null}]
  • 完成待办任务

POST http://{host}:{port}/{contextPath}/task/{id}/complete

curl -X POST -H 'Content-Type: application/json' \-d '{"variables": {"variable1": {"value": "agree","type": "String"}}}' \"http://localhost:8080/engine-rest/task/d2925d3f-5c49-11ef-9f87-e46017b79329/complete"

6.3 通过Java API接口测试

  • 流程引擎接口实现相关引入
	/*** 流程定义相关接口实现类*/@Resourceprivate RepositoryService repositoryService;/*** 流程实例相关接口实现类*/@Resourceprivate RuntimeService runtimeService;/*** 任务相关接口实现类*/@Resourceprivate TaskService taskService;/*** 身份相关服务*/@Resourceprivate IdentityService identityService;
  • 查询所有的流程定义
	/*** 获取所有的流程定义* @return*/@GetMapping("/getProcessDefinitions")public List<String> getProcessDefinitions() {// 创建流程定义查询并列出所有的流程定义List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();// 定义输出变量List<String> definitionKeys = new ArrayList<String>();// 输出流程定义信息for (ProcessDefinition processDefinition : processDefinitions) {System.out.println("Process Definition ID: " + processDefinition.getId());System.out.println("Process Definition Key: " + processDefinition.getKey());System.out.println("Process Definition Name: " + processDefinition.getName());System.out.println("Version: " + processDefinition.getVersion());System.out.println("-------------------------------------------------");// 加入definitionKeysdefinitionKeys.add(processDefinition.getKey());}return definitionKeys;}
  • 查询流程定义数量
	/*** 获取所有的流程定义的数量* * @return 流程定义的数量*/@GetMapping("/getProcessDefinitionCount")public Long getProcessDefinitionCount() {// 创建流程定义查询并列出所有的流程定义个数Long processDefinitionCount = repositoryService.createProcessDefinitionQuery().count();// 输出结果System.out.println("Process Definition size: " + processDefinitionCount);return processDefinitionCount;}
  • 发起流程实例(流程启动)
	/*** 发起流程实例(流程启动)* * @param procDefKey 业务Key* @return*/@GetMapping("/processInstanceStart")public String processInstanceStart(@NotBlank(message = "业务Key不能为空") String businessKey) {// 流程定义KeyString procDefKey = "Process_0woc0aw";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(procDefKey, businessKey);// 输出结果System.out.println(processInstance.getProcessInstanceId());return processInstance.getProcessInstanceId();}
  • 查询待办任务

使用TaskService进行待办任务查询

	/*** 查询待办任务(分配置assigee的所有任务)* 测试:curl http://localhost:8080/camundaTest/listTasks?assignee=liujh*/@SuppressWarnings({ "unchecked", "rawtypes" })@GetMapping("/listTasks")public List<String> listTasks(@NotBlank(message = "assignee不能为空") String assignee) {// 定义返回结果变量listList<String> taskIds = new ArrayList<>();// 列表用户assignee下的当前所有的待办任务列表List<TaskEntity> taskList = (List) taskService.createTaskQuery().taskAssignee(assignee).list();for (Task task : taskList) {String taskTitle = "待办任务ID=" + task.getId() + ",流程实例ID=" + task.getProcessInstanceId() + "\n";System.out.println(taskTitle);taskIds.add(task.getId());}return taskIds;}
  • 完成待办任务
	/*** 完成待办任务,这里仅测试,正式环境需要写到Service层并且写在同一事务*/@GetMapping("/completeTask")public void completeTask(@NotBlank(message = "任务ID不能为空") String taskId,@NotBlank(message = "任务处理人不能为空") String assignee) {// 工作流程传递变量定义Map<String, Object> variables = new HashMap<>();variables.put("approved", true);// 根据任务Id查询出相关信息Task task = taskService.createTaskQuery().taskId(taskId).singleResult();if(task == null) {throw new RuntimeException("未找到任务Id为 " + taskId + " 的任务");}// 设置当前线程的用户身份,用于增加批注信息时设置用户IDidentityService.setAuthenticatedUserId(assignee);// 完成任务taskService.complete(taskId, variables);// 增加批注信息taskService.createComment(taskId, task.getProcessInstanceId(), "同意~");}

二、自建BPMN Web Modeler

Camunda Modeler如何在web浏览器上设计?

第一章节中的流程设计器是直接采用在windows下下载流程设计器安装程序在本机上使用的,但往往希望在浏览器上跟随应用系统部署在一起,形成一个web版的在线设计器。

我公司的大部分项目是使用react的,因此这里就使用开源的BPMN建模库,如:Bpmn.js + react,结合后台java接口来完成。

思路:

  • 1.前端开发
使用bpmn-js构建一个BPMN流程设计器。
提供流程元素的拖拽、连线、属性编辑等功能。
支持流程的保存、加载和导出为BPMN XML格式。
  • 2.后端开发
使用Spring Boot等技术搭建后端服务。
提供API接口来保存用户设计的BPMN XML文件。
提供接口将BPMN文件部署到Camunda流程引擎。
支持版本管理和用户权限管理。

自建BPMN Web Modeler未完成待补充

相关文章:

springboot集成camunda学习与使用

springboot集成camunda学习与使用.md 0、前言一、Spring Boot 集成camunda流程引擎1.新建全新的springboot工程2.添加pom.xml依赖3.启动Spring Boot工程4.切换成mysql数据库5.设计并部署一个BPMN流程6.camunda流程引擎测试6.1 通过camunda web控制台测试6.2 通过camunda rest接…...

微服务架构学习笔记

#1024程序员节|征文# 微服务架构作为现代软件开发中的热门技术架构&#xff0c;因其灵活性和可扩展性&#xff0c;逐渐成为许多企业系统设计的首选。以下是关于微服务的一些学习笔记&#xff0c;涵盖微服务的核心概念、优缺点、设计原则以及常用工具等方面。 1. 微服务是什么&…...

代码优化之简化if臃肿的判断条件

简化if判断条件 方法1&#xff1a; #include <iostream> #include <vector> #include <functional>// 封装参数的结构体 struct ConditionParams {int facenum;double zoomRatio;int iso;double facelv;int face_w;double qualityScore;int xx;int yy; };//…...

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中&#xff0c;语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出&#xff0c;语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息&#xff0c;还是将播客内容转化为文本&#xff0c;…...

Docker 下备份恢复oracle

1.docker导出容器镜像 ##docker save -o 导出后的镜像名称.tar 容器名称|镜像id docker save -o oracle_11g.tar 3fa112fd3642 2.下载镜像上传镜像略 3.加载镜像 ##docker load -i <archive_file> docker load -i oracle11g11201.tar 4.添加版本号…...

oneplus3t-android_framework

0.确认oneplus6 root正常 oneplus6 root材料 oneplus6手机恢复出厂设置 &#xff0c; 或者 线刷 enchilada_22_K.52_210716_repack--HOS-10.0.11.zip &#xff1a; https://gitee.com/OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip OnePlus6Hydrogen_22…...

偷懒总结篇|贪心算法|动态规划|单调栈|图论

由于这周来不及了&#xff0c;先过一遍后面的思路&#xff0c;具体实现等下周再开始详细写。 贪心算法 这个图非常好 122.买卖股票的最佳时机 II(妙&#xff0c;拆分利润) 把利润分解为每天为单位的维度&#xff0c;需要收集每天的正利润就可以&#xff0c;收集正利润的区间…...

C语言初阶七:C语言操作符详解(1)

#1024程序员节|征文# 这篇文章是对之前文章中操作符的补充&#xff0c;可以看之前的文章&#xff1a;C语言初阶&#xff1a;六.算数操作_如何用编程表示除法-CSDN博客 C语言操作符是用于执行各种运算和操作的符号。包括算术操作符&#xff08;如、-、*、/、%&#xff09;&#…...

GO excelize 读取excel进行时间类型转换(自动转换)

GO excelize 读取excel进行时间类型转换&#xff08;自动转换&#xff09; 需求分析 需求&#xff1a;如何自动识别excel中的时间类型数据并转化成对应的 "Y-m-d H:i:s"类型数据。 分析&#xff1a;excelize在读取excel时&#xff0c;GetRows() 返回的都是字符串类…...

【算法与数据结构】二分查找思想

#1024程序员节&#xff5c;征文# 正文&#xff1a; 二分查找&#xff08;binary search&#xff09;是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止&#xff0c;其实有时候数据没有序…...

PHP PDO:安全、灵活的数据持久层解决方案

PHP PDO&#xff1a;安全、灵活的数据持久层解决方案 PHP PDO&#xff08;PHP Data Objects&#xff09;是一个轻量级的、具有兼容接口的数据持久层抽象层。它提供了一个统一的API来访问多种数据库系统&#xff0c;如MySQL、PostgreSQL、SQLite、Oracle等。PDO扩展在PHP 5.1.0…...

九、Linux实战案例:项目部署全流程深度解析

Linux实战案例&#xff1a;项目部署全流程深度解析 在当今信息技术领域&#xff0c;Linux服务器凭借其卓越的稳定性、安全性以及强大的性能表现&#xff0c;被广泛应用于各类项目部署场景之中。本文将全面深入地介绍如何将一个项目成功部署至Linux服务器的完整流程&#xff0c…...

GIS常见前端开发框架

#1024程序员节&#xff5c;征文# 伴随GIS的发展&#xff0c;陆续出现了众多开源地图框架&#xff0c;这些地图框架与众多行业应用融合&#xff0c;极大地拓展了GIS的生命力&#xff0c;这里介绍几个常见的GIS前端开发框架&#xff0c;排名不分先后。 1.Leaflet https://leafl…...

Java | Leetcode Java题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; class Solution {public String[] findRelativeRanks(int[] score) {int n score.length;String[] desc {"Gold Medal", "Silver Medal", "Bronze Medal"};int[][] arr new int[n][2];for (int i 0; i &…...

数据结构 - 堆

今天我们将学习新的数据结构-堆。 01定义 堆是一种特殊的二叉树&#xff0c;并且满足以下两个特性&#xff1a; &#xff08;1&#xff09;堆是一棵完全二叉树&#xff1b; &#xff08;2&#xff09;堆中任意一个节点元素值都小于等于&#xff08;或大于等于&#xff09;左…...

html----图片按钮,商品展示

源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图标</title><style>.box{width:…...

YOLOv11改进策略【卷积层】| ECCV-2024 小波卷积WTConv 增大感受野,降低参数量计算量,独家创新助力涨点

一、本文介绍 本文记录的是利用小波卷积WTConv模块优化YOLOv11的目标检测网络模型。WTConv的目的是在不出现过参数化的情况下有效地增加卷积的感受野,从而解决了CNN在感受野扩展中的参数膨胀问题。本文将其加入到深度可分离卷积中,有效降低模型参数量和计算量,并二次创新C3…...

redis高级篇之redis源码分析List类型quicklist底层演变 答疑159节

(1)ziplist压缩配置:list-compress-depth 0 表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点&#xff0c;而不是指ziplist里面的数据项个数参数list-compress-depth的取值含义如下: 0:是个特殊值&#xff0c;表示都不压缩。这是Redis的默认值…...

Elasticsearch 与 Lucene 的区别和联系

Elasticsearch 与 Lucene 的区别和联系 Elasticsearch 与 Lucene 的区别和联系一、知识背景Elasticsearch 简介Lucene 简介 二、Elasticsearch 和 Lucene 的区别适用场景性能优势和劣势架构设计的异同点 三、Elasticsearch和Lucene的联系四、Elasticsearch和Lucene的应用案例及…...

OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 基于高斯混合模型的背景/前景分割算法。 该类实现了在文献[320]和[319]中描述的高斯混合模型背景减除。 cv::BackgroundSubtractorMOG2 类是 O…...

【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据

【SAP Hana】X-DOC&#xff1a;数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS&#xff0c;从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…...

WPF的UpdateSourceTrigger属性

在WPF中&#xff0c;UpdateSourceTrigger属性用于控制数据绑定中何时将绑定目标&#xff08;通常是UI元素&#xff09;的值更新回绑定源&#xff08;通常是数据对象&#xff09;。这个属性有以下几个值&#xff1a; Default&#xff1a;这是默认值&#xff0c;对于不同的绑定目…...

2024-09-25 环境变量,进程地址空间

一、认识常见的环境变量 1. echo $HOME 输出当前用户对应的家目录 当用户登录系统时&#xff0c;流程如下&#xff1a; &#xff08;1&#xff09;用户登录系统后&#xff0c;系统启动Shell程序。 &#xff08;2&#xff09;启动bash shell&#xff0c;准备接收用户指令。 &a…...

中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用

AgeTech News 一周行业大事件 华为与APUS合作&#xff0c;共筑AI医疗多场景应用 中国移动展出人形机器人&#xff0c;预计投入养老等场景 作为科技与奥富能签约&#xff0c;共拓智能适老化改造领域 天与养老与香港科技园&#xff0c;共探智慧养老新模式 中山大学合作中国…...

青少年编程能力等级测评CPA C++ 四级试卷(1)

青少年编程能力等级测评CPA C 四级试卷&#xff08;1&#xff09; 一、单项选择题&#xff08;共15题&#xff0c;每题3分&#xff0c;共45分&#xff09; CP4_1_1.在面向对象程序设计中&#xff0c;与数据构成一个相互依存的整体的是&#xff08; &#xff09;。 A. 对数据…...

树上任意两点的距离

题目描述 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a;边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每行三个整数 x,y,k&#xff0c;表示点 x 和点 y 之间…...

【 thinkphp8 】00008 thinkphp8数据查询,常用table,name方法,进行数据查询汇总

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【 t…...

Git的命令合集

关于Git的一些命令合集&#xff0c;会慢慢更新&#xff01; 20241024程序员节开始写的&#xff0c;记录一下~~ git查看log、查看详细提交记录 会显示之前的提交记录 , 排序由近及远 git log log按q退出 git回退到某个commit命令&#xff1a; 退到/进到指定commit的sha码&…...

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到&#xff0c;想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…...

创建Windows系统还原点

系统保护...

电话做网站的推广/线上产品推广方案

nlp文本建模算法This is part 3 of a 4 part post. Until now we have talked about:这是4部分帖子的第3部分。 到目前为止&#xff0c;我们一直在谈论&#xff1a; Pre-processing and Cleaning 预处理和清洁 Text Summarization 文字摘要 Topic Modeling using Latent Diric…...

在wordpress主页显示商品/广告投放平台都有哪些

在使用linux的过程中&#xff0c;难免会误删除一些文件&#xff0c;可是怎样找回呢&#xff1f;下面介绍一下ext3文件系统的数据恢复&#xff1a;系统环境&#xff1a;Red Hat Enterprise Linux Server release 5 需要软件&#xff1a;e2fsprogsext3grep测试&#xff1a;e2fspr…...

手机做网站对比路由器做网站/微信crm系统

网络提示错误720的解决方法之一参考文章&#xff1a; &#xff08;1&#xff09;网络提示错误720的解决方法之一 &#xff08;2&#xff09;https://www.cnblogs.com/lemon1991/p/5046868.html 备忘一下。...

seo 网站改版/网站seo快速

关系型数据库MySQL表索引和视图 一、索引 数据库索引通俗的讲就是和书本的目录一样&#xff0c;主要就是为了提高查询数据的效率。由于数据存储在数据库表中&#xff0c;所以索引是创建在数据库表对象上&#xff0c;由表中的一个字段或多个字段生成的键组成&#xff0c;这些键…...

深圳宝安区好不好/苏州seo门户网

solaris下默认的ls后显示的目录或者文件等等是不带颜色的&#xff0c;如果要使其像linux下&#xff0c;那么需要如下步骤一、去www.sunfreeware.com下载coreutils-4.5.4-sol9-sparc-local.gz二、以下分十步完成1. 彩色输出是GUN版本ls命令的一个特征,所以你必须先得到这个版本&…...

广告专业的前景和就业方向/seo的作用有哪些

中国人是可以做开源的&#xff0c;因为中国人并不比谁笨&#xff01;也没有谁限制中国人不许做开源&#xff01;实事求是讲&#xff0c;中国人搞开源可以节省大量美元&#xff0c;是从实际出发&#xff0c;就好像国际石油 老涨价&#xff0c;太贵了&#xff0c;就会有人去发明煤…...