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 子序列:从其中抽掉某个或多个元素而产生的新…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...
