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 子序列:从其中抽掉某个或多个元素而产生的新…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
