【Spring Boot】
目录
🍪1 Spring Boot 的创建
🎂2 简单 Spring Boot 程序
🍰3 Spring Boot 配置文件
🍮3.1 properties 基本语法
🫖3.2 yml 配置文件说明
🍭3.2.1 yml 基本语法
🍩3.3 配置文件里的配置类型分类
🍝3.4 不同配置环境下的配置文件
🥣4 Spring Boot 打印日志
🥢4.1 默认打印的日志
🍉4.2 自定义打印日志
🍈4.3 给某个文件夹单独设置日志级别
🥝4.4 日志持久化
🥥4.5 设置日志的时间打印格式
🍇5 lombok
🥤5.1 前置工作
🍴5.2 使用 lombok 更加简单地输出日志
Spring Boot 是 Spring 的脚手架,是专门为了快速开发 Spring 框架而诞生的。
1 Spring Boot 的创建
类要与启动类放在一起
2 简单 Spring Boot 程序
以前的 Spring 只是一个普通的 Java 项目,没有办法直接与浏览器进行互动,而如今可以使用 Spring Boot 来实现浏览器和用户的交互。
package com.example.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {@RequestMapping("/sayhi")public String sayHi(){return "Hi, Spring Boot.";}
}
在网址输入:
http://localhost:8080/user/sayhi

需要注意的是,需要将该类和启动类放置到同级目录下。

Spring Boot 具备以下优点:
1. 快速集成框架,Spring Boot 在创建时就可以添加依赖
2. 内置运行容器,无需配置 Tomcat 等 Web 容器,可以直接运行和部署程序
3. 快速部署项目,无需外部容器即可启动并运行项目
4. 抛弃繁琐的 XML ,使用注解和配置的方式进行开发
Spring Boot 的设计思想是约定大于配置。类上标注着 @SpringBootApplication 就可以启动 Spring Boot 项目了。
3 Spring Boot 配置文件
Spring Boot 里有两种配置文件:
application.properties,是创建 Spring Boot 项目时默认的文件格式
application.yml,需要用户自己来创建,属于新版的配置文件
特殊说明:
1. 如果 properties 和 yml 一起存在于同一个项目中,如果两个配置文件出现了同样的配置,都配置了 server.port,properties 是 8081,而 yml 设置成 8089,那么会以 properties 中的配置为主,也就是说,properties 配置文件的优先级更高。
2. 理论上两种配置文件可以共存,但在实际工作中,还是会选择其中一种配置文件,为了以后更好地维护。
3.1 properties 基本语法
properties 以键值对的形式书写,key 和 value 之间以 “=”连接的。如:
# 配置项目端口号
server.port=8089
小技巧:配置文件中使用 # 来添加注释信息
properties 会出现中文乱码问题,需要手动设置一下:
Settings 以及 New Projects Setup 中勾选如下:

这种语法格式也就意味着,properties 配置文件中会产生冗余的代码,比如:
# MySQL 配置项
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myblog
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
同样的功能,换了 yml 配置文件会如何呢?且看下一小节内容。
3.2 yml 配置文件说明
yml 是 YAML 的缩写,全称为 Yet Another Markup Language,其中文就是 “另一种标记语言”。
yml 优点分析:
1. 可读性高,写法简单,语法与 JSON 语言类似
2. 支持更多的数据类型
3. 支持更多编程语言,Java、Golang、PHP、Python、Ruby、JavaScript、Perl 中
3.2.1 yml 基本语法
yml 是树形结构的配置文件,基础语法是 key: value,注意 key 和 value 之间使用英文冒号加空格的方式组成,其中的空格不可以省略。
# 使用 yml 连接数据库
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/myblogusername: rootpassword: 123456
3.3 配置文件里的配置类型分类
配置类型分类:
1. 系统配置项,给系统(框架)使用的,比如 server.port
2. 用户自定义配置,开发者自己使用,如 myImage.path
那对于用户自定义配置,用户该如何读取呢?
在项目中想要读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 "${}" 的格式来读取,见如下代码:
# 用户自定义配置项
myImage.path=d:\\image\\
package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;@RestController
public class TestController {@Value("${myImage.path}")private String myImage;@RequestMapping("/sayhi")public String sayHi(){System.out.println(LocalDateTime.now() + "日志"+ "com.example.demo.TestController");return "你好,Spring Boot ->" + myImage;}
}
3.4 不同配置环境下的配置文件
# 指定配置文件的运行环境
spring.profiles.active=test

4 Spring Boot 打印日志
日志级别:
trace:日志级别最低
debug:调试日志级别
info:普通日志级别
warn:警告日志级别
error:错误日志级别
fatal:致命日志级别,只有系统在崩溃时才会输出的日志级别,级别最高
日志级别作用:过滤星系,将业务不需要的日志屏蔽掉
问题:Spring Boot 如何打印日志?
Spring Boot 内置了两个日志框架:SLF4J + LogBack
SLF4J 是让开发者使用和调用的框架,而 LogBack 是最底层实现日志相关操作的框架
4.1 默认打印的日志

从左到右依次是:
日志发生的时间,日志级别,打印日志的线程 id,打印日志线程名称,日志打印的位置(包名+类名)以及日志内容
4.2 自定义打印日志
通过日志工程得到日志对象 -> 通过日志对象提供的打印方法来实现打印
package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LogController {// 1. 得到日志对象private static Logger log =LoggerFactory.getLogger(LogController.class);@RequestMapping("/log")public void log(){String msg = "今天周五,没有刮台风的一天";log.trace("trace -> " + msg);log.debug("debug -> " + msg);log.info("info -> " + msg);log.warn("warn -> " + msg);log.error("error -> " + msg);}
}

4.3 给某个文件夹单独设置日志级别
# 当前项目默认的日志级别
logging.level.root=info# 给 Controller 这个文件夹单独设置日志级别
logging.level.com.example.demo.Controller=debug
4.4 日志持久化
Spring Boot 还支持将日志保存到磁盘中。
# 设置日志的保存路径
logging.file.path=C:\\image\\# 设置日志的保存文件名
logging.file.name=C:\\image\\springboot.log

日志的添加方式不是覆盖,而是叠加。
4.5 设置日志的时间打印格式
# 设置日志时间的打印格式
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss
5 lombok
5.1 前置工作
安装一个 lombok 插件

在项目中添加 lombok 依赖
之后便可以使用 lombok 来编写代码了。
5.2 使用 lombok 更加简单地输出日志
package com.example.demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Slf4j
public class LogController2 {@RequestMapping("/log2")public void log2() {String msg = "今天周五,没有刮台风的一天";log.trace("trace -> " + msg);log.debug("debug -> " + msg);log.info("info -> " + msg);log.warn("warn -> " + msg);log.error("error -> " + msg);}
}
@SLF4J
// 等同于以下代码
private static Logger log = LoggerFactory.getLogger(LogController.class);
Lombok 实现的原理:在代码编译期(.java 文件)时,将 lombok 的注解转换成相应的代码,之后再编译成字节码文件(.class),再交由 JVM 来处理。

相关文章:
【Spring Boot】
目录 🍪1 Spring Boot 的创建 🎂2 简单 Spring Boot 程序 🍰3 Spring Boot 配置文件 🍮3.1 properties 基本语法 🫖3.2 yml 配置文件说明 🍭3.2.1 yml 基本语法 🍩3.3 配置文件里的配置类…...
使用docker 部署自己的chatgpt
直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…...
Python适配器模式介绍、使用方法
一、Python适配器模式介绍 适配器模式(Adapter Pattern) 是一种结构型设计模式,用于将不兼容的接口转换为另一种接口,以便系统间的协同工作。 功能: 适配器模式主要功能是将一个类的接口转换成客户端所期望的另一种接口,以满足…...
【数据结构】复杂度
🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、什么是数据结构 二、什么是算法 三、算法的效率 四、时间复杂度 4.…...
【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考
PP-YOLOE: An evolved version of YOLO Abstract 在本报告中,我们介绍了PP-YOLOE,一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化,采用无锚模式,更强大的骨干和颈部配备CSPRepResSt…...
微服务入门---SpringCloud(二)
微服务入门---SpringCloud(二) 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1)添加一个环境共享配置2)在user-service中读取共享配置…...
51单片机IO口控制
51单片机IO口控制 1.点亮LED灯 原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…...
ERROR 1064 - You have an error in your SQL syntax;
ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…...
leetcode做题笔记46
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一:回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…...
快问快答JS面向对象面试题
1、说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用…...
googlenet论文理解
参考文章:https://www.cnblogs.com/czy4869/p/8977788.html 以及下面这篇的前几行让我弄懂了论文里说的稀疏性和计算性能兼顾:参考文章:https://blog.csdn.net/weixin_52121118/article/details/119740279...
OnnxRuntime TensorRT OpenCV::DNN性能对比(YoloV8)实测
1. 前言 之前把ORT的一套推理环境框架搭好了,在项目中也运行得非常愉快,实现了cpu/gpu,fp32/fp16的推理运算,同onnx通用模型在不同推理框架下的性能差异对比贴一下,记录一下自己对各种推理框架的学习状况 YoloV8模型大小 模型名称参数量NANO3.2M...... 2. CPU篇 CPU推理框架性…...
【QT 网络云盘客户端】——获取用户文件列表信息
目录 1.获取用户文件列表信息分析 2.设置图标属性 3.向服务器获取文件的数量 4.向服务器获取文件信息列表 4.显示图标 1.获取用户文件列表信息分析 1.将QListWidget设置为图标模式 2. 当我们点击"按下载量升序","按下载量降序",“更新” 菜单选项 都会…...
从0到1,无代码开发如何简化产品创新流程
在当今竞争激烈的市场环境中,产品创新已经成为企业成功的关键因素之一。为了在市场上保持竞争力,企业需要不断地推出新产品或改进现有产品。然而,传统的开发流程往往耗时费力,且成本高昂。因此,简化产品创新流程成为了…...
select、epoll 的快速核心理解
一、 select 最low的就是在用户代码中自旋实现所有阻塞socket的监听。但是每次判断socket是否产生数据,都涉及到用户态到内核态的切换。 于是select改进:将fd_set传入内核态,由内核判断是否有数据返回; 然后最low的只能使用自旋…...
HTTP和HTTPS的区别
一、两者概念 1.1 HTTP概念 HTTP 的全称是超文本传输协议(HyperText Transfer Protocol) 是一种用于分布式、协作式和超媒体信息系统的应用协议,简单来说就是一种分布和接收HTML页面的方法,被用于在Web浏览器和网站服务器之间传递…...
分布式异步任务处理组件(二)
一些关键点的设计脑暴记录----very important!!! 首先,任务存储交给kafka,由节点负责写入kafka,acks1;失败重试;透传kafka的提交可靠性,保证任务提交成功;后…...
Jenkins 拉取 GitHub 私有仓库失败问题
添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里...
小程序 多层次对象数组的赋值、动态赋值
1、给对象赋值 data: {form: {Name: ,IDCard: ,Sex: ,}},对单个属性赋值 this.setData({form.Name:章三,[form.Sex]:女,}) 动态赋值 onChangeDate(e) {let field e.currentTarget.dataset.field;this.setData({[form.${field}]: e.detail.data})}, field 是wxml上通过dat…...
angular踩坑
1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转? import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from angular/ro…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...

