SpringBoot笔记【JavaEE】
SpringBoot概念、创建和运行
1.什么是SpringBoot?为什么学习SpringBoot?
Spring Boot 就是 Spring 框架的脚⼿架,它就是为了快速开发 Spring 框架⽽诞⽣的。
2.Spring Boot优点
- 快速集成框架【提供启动添加依赖的功能】
- 内容运行容器【无需配置Tomcat等Web容器,直接运行和部署程序】
- 快速部署项目【无需外部容器即可启动并运行项目】
- 完全抛弃繁琐的XML【使用注解和配置的方式开发】
- 支持更多的监控指标【更好的了解项目的运行情况】
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yMSDElZu-1676077243545)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669808657901.png)]](https://img-blog.csdnimg.cn/e89455d20b494c7da20a7f23046a7f00.png)
3.创建一个Spring Boot程序
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAq7hcJI-1676077243547)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669811250185.png)]](https://img-blog.csdnimg.cn/2d239deedd2d4c0e9352ea5acea415b2.png)
创建UserController类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2TSpVLs-1676077243549)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669811260814.png)]](https://img-blog.csdnimg.cn/3cb7016ec331486796983081ad2c35a9.png)
启动程序
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T3N75dnN-1676077243550)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669811277174.png)]](https://img-blog.csdnimg.cn/5fdf2239cdb24434b187524e2b034c84.png)
打开浏览器检查
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8yWdHFW-1676077243551)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669811299483.png)]](https://img-blog.csdnimg.cn/bc2df542709f4cd3921ca1896aced0d1.png)
Spring Boot 约定
- 需要将对象托管到SpringBoot(Spring)的对象,必须要放在SpringBoot启动类的根路径或者是子路径中,否则不能被框架识别。
- SpringBoot配置比较少,但是SpringBoot的设计思路:约定大于配置
Spring Boot 配置文件
1.配置文件的作用
保存整个项目中所有的数据。
- 数据库的连接信息
- 项目的启动端口
- 第三方系统的调用密钥等信息
- 用于发现和定位问题的普通日志和异常日志
2.配置文件的格式
Spring Boot配置文件主要分为以下两种格式:
- .properties
- .yml
规则:
- 一个项目中可以存在下面两种配置文件,但不建议。
- 当一个项目中出现两种配置文件,配置项会以properties为主。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8S89F8BN-1676077243552)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669813805523.png)]](https://img-blog.csdnimg.cn/6531b03676c74a87a28532f4bc729ed0.png)
配置文件基本语法:
key=value
3.读取配置文件
读取配置文件使用@Value注解
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NhoXxVn2-1676077243552)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669819594371.png)]](https://img-blog.csdnimg.cn/f0151661eaf24b85960060499628e03b.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SuZEcBV-1676077243553)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669819497029.png)]](https://img-blog.csdnimg.cn/d55da07cca3441b78709686ab0b50f63.png)
运行结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2DtFFVvD-1676077243554)(C:\Users\17512\AppData\Roaming\Typora\typora-user-images\1669819627896.png)]](https://img-blog.csdnimg.cn/cc74b69fdefc49c98e1496bc9c1a97f9.png)
4.yml配置文件说明
yml:另一种标记语言。
yml特点:
- 写法简单,可读性高
- 支持更多的数据类型
- 跨语言使用:Java/Golong/高版本 python
yml语法:
key: value
yml连接数据库 vs properties连接数据库

yml对象配置和读取


SpringBoot有几种读取配置文件的方法?
- 使用@Value读取
- 使用@ConfigurationProperties读取
- 使用Environment读取【基本不用】
- 使用@PropertySource读取
- 中文乱码
- 使用原生方式读取【基本不用】
SpringBoot日志文件
日志除了 发现和定位问题,还能实现以下功能:
- 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户
- 记录系统的操作日志,方便数据恢复和定位操作人
- 记录程序的执行时间,方便为以后优化抄袭提供数据
- 等等。
自定义日志的打印
- 在一个类中先获取到日志打印对象(日志框架提供日志对象,而日志框架默认已经集成到SpringBoot里)
- 使用 日志对象提供的方法实现日志的打印

package com.example.springbbootlog.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author SunYuHang* @date 2022-12-03 17:34* @ClassName : UserController //类名*/
@Controller
@ResponseBody
public class UserController {//1.先得到日志对象private final static Logger log = LoggerFactory.getLogger(UserController.class);//设置当前类的类型@RequestMapping("/sayHi")public void sayHi(){//2.使用日志提供的打印方法进行日志打印log.trace("我是 trace");log.debug("我是 debug");log.info("我是 info");log.warn("我是 warn");log.error("我是 error");}}

日志的格式说明

日志级别
- trace: 少许的日志(级别最低)
- debug:调试日志
- info:普通信息日志 (默认日志级别)
- warn:警告日志
- error:错误日志
- fatal:致命的日志(不支持控制台打印)
- 级别从低到高
设置全局日志级别
# 设置全局的日志级别
logging.level.root=trace

设置局部文件夹的日志级别
# 设置局部文件夹的日志级别
logging.level.com.example.springbbootlog.controller=trace
当存在局部日志级别和全局日志级别设置时,那么当访问局部日志级别时,使用的是局部日志级别。
也就是说 局部日志级别优先级 > 全局的日志级别
日志持久化
让日志永久保存到磁盘的某个位置
- 在配置文件中设置日志的保存路径,当设置了保存路径之后,那么日志就会自动的进行持久化。
- 在配置文件中设置日志保存的文件名,日志会自动进行持久化
实现一:
设置日志的保存路径

设置日志的保存名称
# 设置日志的保存名称
logging.file.name=D:\\log\\springboot.log

日志默认情况是追加的。
更简单的实现自定义日志的打印——lombok
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,而且每个类都要添加一遍,也很麻烦,这里有种更好的日志输出方式,使用 lombok 来更简单的输出。
- 添加 lombok 框架支持
- 使用 @slf4j 注解输出日志


SpringBoot单元测试
1. 什么是单元测试?
单元测试是开发者编写的⼀⼩段代码,⽤于检验被测代码的⼀个很⼩的、很明确的(代码)功能是否正
确。 执⾏单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。如果测试结果符合我们的预
期,称之为测试通过,否则就是测试未通过(或者叫测试失败)。
2. 单元测试的好处?
- 可以非常简单、直观、快速的测试某一个功能是否正确【单元测试不需要自己启用 tomcat】;
- 使用单元测试可以帮我们在打包的时候,发现一些问题,因为在打包之前,所有的单元测试必须通过,否则不能打包成功;
- 使用单元测试,在测试功能的时候,不会污染本地数据库【事务回滚】
3. SpringBoot单元测试使用
单元测试的实现:
- 确认内置单元测试框架
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
- 生产单元测试类


- 配置单元测试的类添加 @SpringBootTest 注解,添加单元测试的业务代码。


相关文章:
SpringBoot笔记【JavaEE】
SpringBoot概念、创建和运行 1.什么是SpringBoot?为什么学习SpringBoot? Spring Boot 就是 Spring 框架的脚⼿架,它就是为了快速开发 Spring 框架⽽诞⽣的。 2.Spring Boot优点 快速集成框架【提供启动添加依赖的功能】内容运行容器【无需…...
目标检测算法之voxelNet与pointpillars对比
算法对比 3D目标检测发展简史 点云目标检测目前发展历经VoxelNet、SECOND、PointPillars、PV-RCNN。 2017年苹果提出voxelnet,是最早的一篇将点云转成voxel体素进行3D目标检测的论文。 然后2018年重庆大学的一个研究生Yan Yan在自动驾驶公司主线科技实习的时候将vo…...
电脑里的连接速度双工模式是什么?怎么设置
双工模式包括全双工、半双工模式。1.半双工1、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。所谓半双工就是指一个时间段内只有一个动作发生。早期的对…...
springboot整合单机缓存ehcache
区别于redis的分布式缓存,ehcache是纯java进程内的单机缓存,根据不同的场景可选择使用,以下内容主要为springboot整合ehcache以及注意事项添加pom引用<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehc…...
在阿里干了2年的测试,总结出来的划水经验
测试新人 我的职业生涯开始和大多数测试人一样,开始接触都是纯功能界面测试。那时候在一家电商公司做测试,做了一段时间,熟悉产品的业务流程以及熟练测试工作流程规范之后,效率提高了,工作比较轻松,这样我…...
硬盘分类及挂载硬盘知识补充和介绍
一、硬盘介绍Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘1.对于IDE硬盘,驱动器标识符为"hdx~",其中"hd"表明分区所在设备的类型,这里是指IDE硬盘了。"x"为盘号(a为基本盘,b为基…...
【MyBatis】自定义映射resultMap
8.1、resultMap处理字段和属性的映射关系 若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射 <!--resultMap:设置自定义映射属性:id:表示自定义映射的唯一标识type:查询的数据要映射的实体类的…...
mysql的锁和事务
mysql的锁 读写锁: 读锁是共享锁,多个用户在同一时刻可以读取同一资源,相互不受干扰写锁是排他锁,写锁会阻塞其他的写锁和读锁,这样可以确保在指定的时间内,只有一个用户可以写入 锁的颗粒度: …...
为什么B站中的弹幕可以不遮挡人物
上班逛B站时摸鱼时,看到了满屏的弹幕,而且还不挡脸,突然心血来潮来看看它是怎么实现的? 不难发现弹幕其实它就是有一个蒙版层div,遮挡在视频组件的上方,z-index层级设置的比较高(这里是11&…...
数据结构 第八章 查找(静态查找表)
集合 1、集合中的数据元素除了属于同一集合外,没有任何的逻辑关系 2、在集合中,每个数据元素都有一个区别于其他元素的唯一标识(键值或者关键字值) 3、集合的运算: 1 查找某一元素是否存在(内部查找、外部查找) 2 将集合中的元素按照它的唯一标识进行排序4、集合的…...
【Python基础】数据类型(元组、列表)
文章目录二. 数据类型2.1 元组 tuple2.1.1 定义特性2.1.2 拼接拷贝2.1.3 元组拆包2.1.4 元组方法 count2.2 列表 list2.2.1 基础定义2.2.2 增删操作2.2.3 连接联合2.2.4 其他常规操作2.2.5 列表推导式2.2.6 生成器表达式2.x 小结:何时使用元组或列表二. 数据类型 Py…...
你了解互联网APP搜索和推荐的背后逻辑么?
1.搜索和推荐无处不在我们习惯了百度、Google、360搜索的便捷,输入你想要搜索的关键词,立马呈现给你一批对应的结果,供你筛选。我们也经常上淘宝、京东、拼多多购物,输入想买的商品,瞬间列出一页一页的商品清单供我们选…...
Bug的级别,按照什么划分
Bug分类和定级一、bug的定义二、bug的类型三、bug的等级四、bug的优先级一、bug的定义一般是指不满足用户需求的则可以认为是bug,狭义指软件程序的漏洞或缺陷,广义指测试工程师或用户提出的软件可改进的细节、或与需求文档存在差异的功能实现等对应三个测…...
微服务项目简介
项目简介 项目模式 电商模式:市面上有5种常见的电商模式,B2B、B2C、 C2B、 C2C、O2O; 1、B2B模式 B2B (Business to Business),是指 商家与商家建立的商业关系。如:阿里巴巴 2、B2C 模式 B2C (Business to Consumer), 就是我们经常看到的供…...
SLAM中坐标轴旋转及ros的接口解释
读完几个loam算法,满篇的坐标轴旋转,还是手写的(作者,用eigen写不好嘛。。。),我滴天适应了好久…,今天就总结一下坐标轴旋转问题。 一、首先,我们看一下ros中关于欧拉角旋转的函数:setRPY、set…...
文件管理(9)
文件管理 0 引言 为什么要引入文件系统? 信息管理的需要:用户面前提供一种规格化的机制,方便用户对文件的存取、提高效率。操作系统本身需要–操作系统本身也不是常驻内存的,也有大量的信息需要存于外存。 1 文件定义 文件&a…...
PyTorch学习笔记:nn.TripletMarginLoss——三元组损失
PyTorch学习笔记:nn.TripletMarginLoss——三元组损失 torch.nn.TripletMarginLoss(margin1.0, p2.0, eps1e-06, swapFalse, size_averageNone, reduceNone, reductionmean)功能:创建一个三元组损失函数(triplet loss),用于衡量输入数据x1,x…...
冒泡排序详解
冒泡排序是初学C语言的噩梦,也是数据结构中排序的重要组成部分,本章内容我们一起探讨冒泡排序,从理论到代码实现,一步步深入了解冒泡排序。排序算法作为较简单的算法。它重复地走访过要排序的数列,一次比较两个元素&am…...
git极快上手指南超级精简版
注:本文参考https://www.liaoxuefeng.com/wiki/896043488029600 原文非常值得一读,作者学识渊博,补充了很多有意思的知识。我仅仅是拾人牙慧。 git是最先进的分布式版本控制系统。 版本控制系统——自动记录系统中文件的改动情况࿰…...
蓝桥杯-最长公共子序列(线性dp)
没有白走的路,每一步都算数🎈🎈🎈 题目描述: 已知有两个数组a,b。已知每个数组的长度。要求求出两个数组的最长公共子序列 序列 1 2 3 4 5 序列 2 3 2 1 4 5 子序列:从其中抽掉某个或多个元素而产生的新…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
