SpringBoot学习笔记(一)
Idea中隐藏指定文件或指定类型文件
- setting->File Types->Ignored Files and Folders
- 输入要隐藏的文件名,支持*号通配符
- 回车确认添加
SpringBoot概述
parent
小结:
- 开发SpringBoot程序要继承spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用依赖的形式实现效果
starter
小结:
- 开发SpringBoot程序需要导入坐标时通常导入对应的starter
- 每个不同的starter根据功能不同,通常包含多个依赖坐标
- 使用startwe可以实现快速配置的效果,达到简化配置的目的
引导类
- 启动方式
@SpringBootApplication
public class SpringBootApplication {public static void main(String[] args) {SpringApplicaiton.run(SpringBootApplicaiton.class,args);}
}
- SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目
- SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean
小结:
- SpringBoot工程提供引导类用来启动程序
- SpringBoot工程启动后创建并初始化Spring容器
辅助功能
内置服务器
- tomcat(默认) apache出品,粉丝多,应用面广,负载了若干较重的组件
- jetty 更轻量级,负载性能远不及tomcat
- undertow undertow,负载性能勉强跑赢tomcat
小结:
- 内嵌Tomcat服务前是SpringBoot辅助功能之一
- 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
- 变更内嵌服务器思想是去除现有服务器,添加全新的服务器
REST风格
REST简介
-
REST,表现形态状态转换
传统风格资源描述形式
http://localhost/user/getById?id=1
http://localhost/user/saveUserREST风格描述形式
http://localhost/user/1
http://localhost/user -
优点:
隐藏资源的访问行为,无法通过地址得到对资源是何种操作
书写简化 -
按照REST风格访问资源时使用行为动作区分对资源进行了何种操作
http://localhost/users 查询全部用户信息 GET (查询)
http://localhost/users /1 查询指定用户信息 GET (查询)
http://localhost/users 添加用户信息 POST(新增/保存)
http://localhost/users 修改用户信息 PUT(修改/更新)
http://localhost/users /1 删除用户信息 DELETE (删除)
注意事项
上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范
描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts…
RESTful入门案例
- 设定http请求动作
@RequestMapping(value = "/users", method = RequestMethod.POST)
@ResponseBody
public String save(@RequestBody User user) {System.out.println("user sava..." + user);return "user save";
}@RequestMapping(value = "/users", method = RequestMethod.PUT)
@ResponseBody
public String update(@RequestBody User user) {System.out.println("user update..." + user);return "user update";
}
- 设定请求参数(路径变量)
@RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String update(@PathVariable Integer id) {System.out.println("user delete..." + id);return "user delete";
}
详解
- 名称:@RequestMapping
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径
- 范例:
@RequestMapping(value = "/users", method = RequestMethod.POST)
@ResponseBody
public String save(@RequestBody User user) {System.out.println("user save..." + user);return "user save";
}
- 属性
value:访问请求路径
method:http请求动作,标准动作(GET/POST/PUT/DELETE)
- 名称:@PathVariable
- 类型:形参注解
- 位置:SpringMVC控制器方法形参定义前面
- 作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
- 范例:
@RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "user delete";
}
@RequestBody @RequestParam @PathVariable
-
区别
@RequestParam用于接收url地址传参或表单传参
@RequestBody用于接收json数据
@pathVariable用于接收路径参数,使用{参数名称}描述路径参数 -
应用
开发中,发送请求参数超过1小时,以json格式为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数
采用RESTful进行开发,当参数数据较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
RESTful快速开发
- 名称:@RestController
- 类型:类注解
- 位置:基于SpringMVC的RESTful开发控制器类定义上方
- 作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能
- 范例:
@RestController
public class BookController {
}
- 名称:@GetMapping @PostMapping @PutMapping @DeleteMapping
- 类型:方法注解
- 位置:基于SpringMVC的RESTful开发控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求
- 范例:
@GetMapping("/{id}")
public String getById(@PathVariable Interger id) {System.out.println("book getById,,,"+id);return "book getById";
}
- 属性
value(默认):请求访问路径
复制模块
小结:
- 在工作空间中复制对应工程,并修改工程名称
- 删除与Idea相关配置文件,仅保留src目录与pom.xml
- 修改pom.xml文件中的artifactId与新工程/模块名相同
- 删除name标签(可选)
- 保留备份工程供后期使用
基础配置
属性配置
- 修改配置
修改服务器端口
server.port=80
关闭运行日志图标(banner)
spring.main.banner-mode=off
设置日志相关
logging.level.root=debug
SpringBoot默认配置文件application.properties
- SpringBoot内置属性查询地址:
http://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties
配置文件分类
- SpringBoot提供了多种属性配置方式
appliction.properties
server.port=80
appliction.yml
server:port:81
appliction.yaml
server:port:82
小结:
1、SpringBoot提供了3种配置文件的格式
- properties(传统格式/默认格式)
- yml(主流格式)
- yaml
2、配置文件间的加载优先级
- properties(最高)
- yml
- yaml(最低)
3、不同配置文件中相同配置按照假造优先级相互覆盖,不同配置文件中不同配置全部保留
4、指定SpringBoot配置文件
- Setting -> Project Structure -> Facets
- 选择对应项目/工程
- Customize Spring Boot
- 选择配置文件
yaml文件
yaml语法规则
字面值表示方式
boolean: TRUE //TRUE,true,True,FALSE,false,False均可
float: 3.14 //6.8523015e+5 支持科学计数法
int: 123 //0b1010_0111_0100_1110 支持二进制、八进制、十六进制
null: ~ //使用~表示null
string: HelloWorld //字符串可以直接书写
string2: "Hello World" //可以使用双引号包裹特殊字符
date: 2018-02-17 //日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 //时间和日期之间使用T连接,最后使用+代表时区
数据表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject:- Java- 前端- 大数据
enterprise:name: itcastage: 16subject:- Java- 前端- 大数据likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式- name: Tomeage: 4- name: Jerryage: 5
users: #对象数组格式二-name: Tomage: 4-name: Jerryage: 5
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
小结:
1.yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- #表示注释
2.注意属性名冒号后面与数据之间有一个空格
yaml数据读取
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名…}
lession: SpringBootserver:port: 82enterprise:name: itcastage: 16tel: 400618400subject:- Java- 前端- 大数据
@RestController
@RequestMapping("/boots")
public class BookController {@Value("${lesson}")private String lessonName;@Value("${server.port}")private int port;@Value("${enterprise.subject[1]}")private String[] subject_01;
}
总结:
1.使用@Value配合SpEL读取单个数据
2.如果数据存在多层级,依次书写层级名称即可
- 在配置文件中可以使用属性名引用方式引用属性
baseDir: /usr/local/firecenter:dataDir: ${baseDie}/datatempDir: ${baseDir}/tmplogDir: ${baseDir}/logmsgDie: ${baseDir}/msgDir
属性值中如果出现转义字符,需要使用双引号包裹
lesson: "Spring\tboot\nlesson"
总结:
- 在配置文件中可以使用${属性名}方式引用属性值
- 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析
- 封装全部数据到Enviroment对象
lession: SpringBootserver:port: 82enterprise:name: itcastage: 16tel: 400618400subject:- Java- 前端- 大数据
@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate Environment env;@GetMapping("/{id}")public String getById(@PathVariable Integer id) {System.out.println(env.getProperty("lesson")); System.out.println(env.getProperty("enterprise.name"));System.out.println(env.getProperty("enterprise.subject[1]"));return "hello"; }
}
总结:
1.使用Enviroment对象封装全部配置信息
2.使用@Autowired自动装配数据到Enviroment对象中
- 自定义对象封装指定数据
lession: SpringBootserver:port: 82enterprise:name: itcastage: 16tel: 400618400subject:- Java- 前端- 大数据
@Data
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {private String name;private Integer age;private String[] subject;
}
datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCusername: rootpassword: root
@Data
@Component
@ConfigurationProperties(prefix = "datasource")
public class Enterprise {private String driverClassName;private String url;private String userName;private String password;
}
总结:
1.使用@CongigurationProperties注解绑定配置信息到封装类中
2.封装类需要定义为Spring管理的bean,否则无法进行属性注入
整合JUnit
- SpringBoot整合JUnit
@SpringBootTest
class SpringbootApplicationTests {@Autowiredprivate BookService bookService;@Testpublic void testSave(){bookService.save();}
}
- 名称:@SpringBootTest
- 类型:测试类注解
- 位置:测试类定义上方
- 作用:设置JUnit加载的SpringBoot启动类
- 范例:
@SpringBootTest
class SpringBootApplicaitonTests {}
总结:
1.导入测试对应的starter
2.测试类使用@SpringBootTest修饰
3.使用自动装配的形式添加要测试的对象
- 名称:@SpringBootTest
- 类型:测试类注解
- 位置:测试类定义上方
- 作用:设置Junit加载的SpringBoot启动类
- 范例:
@SpringBootTest(classes = SpringbootApplication.class)
class SpringbootApplicationTest {}
- 相关属性
classes:设置SpringBoot启动类
注意事项:
如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定
总结:
1.测试类如果存在于引导类所在包或子包中无需指定引导类
2.测试类如果不存在引导类所在的包或子包中需要通过classes属性指定引导类
SpringBoot整合MyBatis
步骤:
- 创建新模块,选择Spring初始化,并配置模块相关基础信息
- 选择当前模块需要使用的技术集(MyBatis、MySQL)
- 设置数据源参数
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_dbusername: rootpassword: root
4.定义数据层接口与映射配置
@Mapper
public interface UserDao {@Select("select * from user")public List<User> getAll();
}
5.测试类中注入dao接口,测试功能
@SpringBootTest
class SpringbootMybatisApplicationTests {@Autowiredprivate BookDao bookDao;@Testpublic void testGetById(){Book book = bookDao.getById(1);System.out.println(book);}
}
总结:
1.勾选MyBatis技术,也就是导入MyBatis对应的starter
2.数据库连接相关信息转换成配置
3.数据库SQL映射需要添加@Mapper被容器识别到
SpringBoot整合MyBatis常见问题处理
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCusername: rootpassword: root
总结:
1.MySQL8.X驱动强制要求设置时区
- 修改url,添加serverTimezone设定
- 修改MySQL数据库配置(略)
2.驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver
SpringBoot整合MyBatis-Plus
1.手动添加SpringBoot整合MyBatis-Plus的坐标,可以通过mvnrepository获取
<dependency><groupId>com.baomidou</groudId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>
注意事项:
由于SpringBoot中未收录MyBatis-Plus的坐标版本,需要指定对应的Version
2.定义数据层接口与映射配置,继承BaseMapper
@Mapper
public interface UserDao extends BaseMapper<User> {
}
总结:
1.手工添加Mybatis-Plus对应的starter
2.数据层接口使用BaseMapper简化开发
3.需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标
整合Druid
导入Druid对用的starter
<dependency><groupId>com.alibaba</groudId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version>
</dependency>
变更Druid的配置方式
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCusername: rootpassword: root
总结:
1.整合Druid需要导入Druid对应的starter
2.根据Druid提供的配置方式进行配置
3.整合第三方技术通过方式
- 导入对应的starter
- 根据提供的配置格式,配置非默认值对应的配置项
工程打包与运行
1.对SpringBoot项目打包(执行Maven构建指令package)
mvn package
2.运行项目(执行启动指令)
java -jar springboot.jar
注意事项:
jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
总结:
1.SpringBoot工程可以基于java环境下独立运行jar文件启动服务
2.SpringBoot工程执行mvn名利package进行打包
3.执行jar命令:java -jar 工程名.jar
命令行启动常见问题及解决方案
window端口被占用
#查询端口
netstat -ano#查询指定端口
netstat -ano |findstr "端口号"#根据进程PID查询进程名称
tasklist |findstr "进程PID号"#根据PID杀死任务
taskkill -f -pid "进程PID号"#根据进程名称杀手任务
taskkill -f -t -im "进程名称"
临时属性
1.使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
2.临时属性添加方式:java -jar 工程名.jar –属性名=值
3.多个临时属性之间使用空格分隔
4.临时属性必须是当前boot工程支持的属性,否则设置无效
临时属性(开发环境)
带属性启动SpringBoot程序,为程序性添加运行属性
Edit Configrations->Configuration->Program arguments
--server.port=80 --logging.level.root=warn
通过编程形式带参数启动SpringBoot程序,为程序添加运行参数
public static void main(String[] args) {String[] arg = new String[1];arg[0] = "--server.port=8080";SpringApplication.run(SSMPApplication.class,arg);
}
不携带参数启动SpringBoot程序
public static void main(String[] args) {SpringApplication.run(SSMPApplication.class);
}
总结:
启动SpringBoot程序时,可以选择是否使用命令行属性为SpringBoot程序传递启动属性
相关文章:
SpringBoot学习笔记(一)
Idea中隐藏指定文件或指定类型文件 setting->File Types->Ignored Files and Folders输入要隐藏的文件名,支持*号通配符回车确认添加 SpringBoot概述 parent 小结: 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-pa…...

美国原装KEYSIGHT E4981A(安捷伦) E4981A电容计
KEYSIGHT E4981A(安捷伦) Keysight E4981A(安捷伦)电容计为生产线中的陶瓷电容器测试提供了高速、可靠的测量。E4981A 实现了电容从小到大的测量能力,测量准确。Agilent E4981A 电容计有助于提高测试吞吐量࿰…...

K8S的基础概念
目录 一、k8s概述 1、k8s简介 1.1 k8s的作用 1.2 k8s的由来 1.3 k8s的含义 1.4 k8s的官网 1.5 GitHub 2、为什么要用 K8S? 2.1 K8s的目标 2.2 K8s解决了裸跑Docker 的若干痛点: 2.3 K8s的主要功能 3、K8s的特性 二、Kubernetes 集群架构与组件 1、工作流程 2、…...

【数据结构】——环形队列
文章目录一.环形队列的定义及其特点二.使用数组来实现环形队列1.创建一个队列2.初始化队列3. 判断环形队列是否为空4.判断环形队列是否已满5. 向循环队列插入元素,插入成功返回真6.删除环形链表的数据7. 取队头元素8.取队尾元素8.释放空间总结一.环形队列的定义及其…...

windows 安装Qt
下载 下载地址https://download.qt.io/,此文已5.7.0为例子。 根据图片依次选择即可。 安装 安装过程参考另一篇文章Ubuntu 安装 Qt5.7.0即可 配置环境变量 ps:我就是之前没配置环境变量,直接使用创建项目,项目源码直接运行是…...

spring cloud gateway集成sentinel并扩展支持restful api进行url粒度的流量治理
sentinel集成网关支持restful接口进行url粒度的流量治理前言使用网关进行总体流量治理(sentinel版本:1.8.6)1、cloud gateway添加依赖:2、sentinel配置3、网关类型项目配置4、通过zk事件监听刷新上报api分组信息1、非网关项目上报api分组信息…...

wafw00f工具
wafw00f Web应用程序防火墙指纹识别工具 github地址:https://github.com/EnableSecurity/wafw00f 安装环境:python3环境 —>使用 pip install wafw00f 进行安装 安装成功后目录:python安装目录中的Lib\site-packages\wafw00f 本机为&a…...

论文阅读笔记-DiffusionInst: Diffusion Model for Instance Segmentation
文章目录DiffusionInst: Diffusion Model for Instance Segmentation摘要介绍任务介绍实例分割的几种方法想法来源贡献方法整体结构Mask RepresentationDiffusionInst组成TrainingInference不足之处感悟DiffusionInst: Diffusion Model for Instance Segmentation 代码&#x…...

解决CondaUpgradeError网上的方法都不奏效(回退版本、upgrade/update都不行)的问题和CondaValueError
问题描述 Executing transaction: failed ERROR conda.core.link:_execute(502): An error occurred while installing package ‘conda-forge::certifi-2022.9.24-pyhd8ed1ab_0’. CondaUpgradeError: This environment has previously been operated on by a conda version…...

基于某业务单登陆场景并发测试实战
文章目录1 测试目的2 测试目标和测试对象3 名词解释4 测试说明5 测试环境和工具5.1 测试工具5.2 测试环境5.3 人力计划6 测试用例6.1 方案设计6.2 接口地址6.3 接口参数6.3.1 header参数6.3.2 请求参数7 脚本设计8 监控数据8.1 虚拟用户并发情况8.2 事务响应时间8.3 每秒点击次…...

JVM内存模型
程序计数器 多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正…...

三、NetworkX工具包实战3——特征工程【CS224W】(Datawhale组队学习)
开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页:https://web.stanford.edu/class/cs224w NetworkX…...

分布式之Raft共识算法分析
写在前面 在分布式之Paxos共识算法分析 一文中我们分析了paxos算法,知道了其包括basic paxos和multi paxos,并了解了multi paxos只是一种分布式共识算法的思想,而非具体算法,但可根据其设计具体的算法,本文就一起来看…...
数据库——范式
目录 一、概念 二、各范式 第一范式 第二范式 第三范式 BC范式 第四范式 第五范式(略) 一、概念 基本概念 关系:通常一个关系对应一张表;元组:一行;属性:一列;码࿱…...
Geospatial Data Science(2):Geospatial Data in Python
Geospatial Data Science(2):Geospatial Data in Python PART 1: 检查数据 1.1 Imports import geopandas as gpd # for geospatial data handling import osmnx # for handling data from OpenStreetMap (osm) with the help of networkX (nx) import contextily as cx # f…...

16.hadoop系列之MapReduce之MapTask与ReduceTask及Shuffle工作机制
1.MapTask工作机制 以上内容我们之前文章或多或少介绍过,就已网络上比较流行的该图进行理解学习吧 MapTask分为五大阶段 Read阶段Map阶段Collect阶段溢写阶段Merge阶段 2.ReduceTask工作机制 ReduceTask分为三大阶段 Copy阶段Sort阶段Reduce阶段 3.ReduceTask并…...
java 面试过程中遇到的几个问题记录20230220
微服务注册中心的作用微服务注册中心的作用是协调和管理微服务实例的注册和发现。它充当了服务注册表,可以维护服务实例的元数据,例如服务名称、IP 地址和端口号等。当一个微服务启动时,它会向注册中心注册自己的元数据,以使其他服…...
面试题:【数据库三】索引简述
目录 一、索引是什么 二、索引规则 三、索引失效场景 一、索引是什么 索引是帮助Mysql高效获取数据的【数据结构】索引存储在文件系统中索引的文件存储形式与存储引擎相关 mysql有三种存储引擎 InnoDBMyISAMMEMORY索引文件的结构 Hash Hash索引底层是哈希表,哈希…...

数据库必知必会:TiDB(12)TiDB连接管理
数据库必知必会:TiDB(12)TiDB连接管理TiDB连接管理TiDB的连接特性连接TiDBMySQL命令行客户端图形界面客户端连接其他连接方式写在后面TiDB连接管理 TiDB的连接特性 TiDB Server主要负责接收用户的会话请求,接收SQL并负责SQL语句…...

电源大事,阻抗二字
作者:一博科技高速先生成员 姜杰PCB设计时,我们通常会控制走线的特征阻抗;电源设计时,又会关注电源分配系统(PDN)的交流阻抗,虽然都是阻抗,一个是信号的通道要求,一个是电…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...