Spring Boot 配置文件和日志

目录

配置文件格式

properties配置文件说明

1.properties基本语法

2.读取配置文件

3.properties缺点

yml配置文件说明

1.yml基本语法

2.配置不同数据类型

3.字符串特殊情况

4.配置对象

properties和yml对比

日志

日志的使用

日志级别

日志持久化

Lombok

Lombok原理解释


Spring中配置文件有很重要的地位,所有的总要数据都是在配置文件中配置的。

比如数据库的信息、项目使用的端口号、日志等等。

配置文件格式

Spring Boot配置文件主要分为以下两种格式:

.properties 和 .yml

  1. 当properties和yml一起存在一个项目中,并且出现了同样的配置,比如serve人.port这个配置,这个时候会以properties中的配置为主,也就是优先级高于.yml。但加载完properties后仍然会加载yml文件。
  2. 实际来说,并不会出现两种配置文件共存的情况,只出现一种配置文件有利于维护。

properties配置文件说明

properties是古老的配置文件,也是创建Spring Boot 项目默认的配置文件。

1.properties基本语法

properties是以键值对的形式来配置的,key和value之间以 = 连接。并且可以使用#来添加注释。

2.读取配置文件

在项目中想要主动读取配置文件的内容,可以使用@Value注释来实现。

使用  ${}  的格式读取,并且在Construct后面打印出来

3.properties缺点

properties是以key-value的形式配置的。

但是这样就会出现很多的冗余信息

这个时候我们就可以使用yml的配置文件了。

yml配置文件说明

yml是YAML的 缩写,全称是 Yet Another Markup Language 翻译成中文就是“另⼀种标记语言”。

1.yml基本语法

yml是树形结构的配置文件,它的基础语法是  key: value。注意key和value之间使用英文冒号加空格的方式组成的,其中的空格不能省略。

2.配置不同数据类型

yml配置读取的方式和properties相同,使用@Value注解即可。

3.字符串特殊情况

字符串默认不用加引号,但是加英文的单引号和双引号可以表示特殊的含义。

双引号不会转义字符串里面的特殊字符,特殊字符会作为本身想要表达的意思。

4.配置对象

我们还可以在yml中配置对象:

或者使用行内写法:        

这个时候就不能使用@Value来读取配置中的对象了,而是要使用ConfigurationProperties来读取:

要注意,从配置文件中获取到student对象,需要在相关的类中定义Getter和Setter方法。

properties和yml对比

  1. properties以key=value的方式配置,而yml使用类似于json格式的树形配置方法配置的。
  2. yml可以很好的解决数据冗余的问题
  3. yml通用型非常好,并且支持更多的数据类型

日志

在Spring Boot中,我们需要日志。

  • 记录错误日志和警告日志:比如排查错误、bug
  • 用户日志:可以记录用户登录日志,方便分析用户是正常登录还是恶意访问的用户
  • 系统日志:记录系统的操作日志,方便数据的恢复和定位操作人员
  • 程序执行日志:记录程序的执行时间

日志的使用

Spring Boot项目在启动的时候就默认有日志输出:

在程序中获取日志对象需要使用日志工厂LoggerFactory:

可以看到我们打印了五个日志,但是只显示出来了三个。这就要提到日志级别了。

日志级别

日志级别可以帮助我们实现不同环境下的日志打印需求,如开发环境我们就需要很详细的信息,而生产环境为了保证性能和安全就需要输入尽量少的日志。

  • trace:微量,少许的意思,级别最低;
  • debug:需要调试时候的关键信息打印;
  • info:普通的打印信息(默认日志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件。

Spring Boot默认的级别是info,日志级别比info高的才显示出来。越往上关于日志的消息就收到的越多。

并且我们可以设置日志级别,以yml配置文件为例:

此时全局的日志只有error级别的才会显示,所以之前的日志都没显示。自定义在TestController的日志更改为了trace级别,也就是只要比trace级别高的日志就会显示出来。

并且也可以用info来自定义日志内容。

日志持久化

以上的内容都是输出在控制台上,生产环境上我们需要将日志保存到本地或者数据库中。

想要将日志持久化保存,只需要在配置文件中指定日志的存储目录或者指定保存名称后,日志就会自动保存。也就是说不配置就不会保存,配置好了就默认保存。

Lombok

之前我们已经简单的介绍了Lombok,这次我们详细的说明一下。

首先是对日志的快捷添加,使用 @Slf4j 注释来快速添加日志工厂的元素。

使用这一个注解就可以代替之前的LoggerFactory.getLogger这样繁琐的操作了。

但是使用注解时,只能使用log对象才能输出,这是lombok提供的对象名。

Lombok原理解释

之前介绍过JVM,里面详细解释到:用户代码(.java)通过编译成字节码(.class)再通过JVM运行,Lombok直接介入到编码的过程,生成的字节码文件是被修改过的。

也就是说,拿到了Lombok修改过的.class文件,和用户自己添加的未经过简化的代码编译后是一致的。

基本注解:

  • @Getter 自动添加 getter 方法
  • @Setter 自动添加 setter 方法
  • @ToString 自动添加 toString 方法
  • @EqualsAndHashCode 自动添加 equals 和 hashCode 方法
  • @NoArgsConstructor 自动添加无参构造方法
  • @AllArgsConstructor 自动添加全属性构造方法,顺序按照属性的定义顺序
  • @NonNull 属性不能为 null
  • @RequiredArgsConstructor 自动添加必需属性的构造方法,final + @NonNull 的 属性为必需

组合注解:

  • @Data  作用为@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

日志注解:

  • @Slf4j  添加一个名为log的日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/332055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络课程设计-网络聊天程序的设计与实现

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 客户端 3.1.1 步骤 3.1.2 关键代码 3.2 服务器 3.2.1 步骤 3.2.2 关键代码 4 实验结果与分析 5 代码 5.1 客户端 5.2 服务器 前言 本实验为计算机网络课程设计内容,基本上所有代码都是根据指导书给的附…

1.18寒假集训

A: 解题思路&#xff1a; 这题看似很复杂&#xff0c;其实很简单&#xff0c;找规律不难发现就是输出n 1 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int n;cin >> n;cout << n 1;return 0; } B: 解题思路&#xf…

3dmax中怎么在模型上开洞?

3dmaxS是Autodesk公司开发的基于PC系统的三维动画渲染和制作软件。我们可以使用它来做各种模型。那么怎么在模型上开洞呢&#xff1f;我们一起来看看吧&#xff01; 1、首先我们打开我们的3damx&#xff0c;这里面我使用的版本为3damxs2012,虽然版本可能各不相同。但是功能并没…

【RT-DETR有效改进】轻量级视觉变换器RepViT改进特征提取网络(轻量化网络)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

数据库MySQL----多表查询

二、多表查询 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); CREATE TABLE score ( id INT(10) NOT…

翻遍全网才找到的Oracle19c安装教程(Windows版)

一、下载 官方地址&#xff1a;Database Software Downloads | Oracle 中国 我下载下来了&#xff0c;有需要的可以网盘领取。 链接&#xff1a;https://pan.baidu.com/s/1-OeiuoBX3K4X7Kw7vGxdFA?pwdhssy 提取码&#xff1a;hssy 二、解压 下载下来是一个zip格式的压缩…

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例&#xff1a;https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫&#xff0c;爬取页面图片 项目介绍 开发工具&#xff1a;IDEA2023.2.5 JDK&#xff1a;Java17 SpringBoot&#xff1a;3.2.x 通过 SpringBoot 快速构建开发环境…

身份验证遇到问题,登陆ChatGPT时提示:“we ran into an issue while authenticating you…”

oops&#xff01; we ran into an issue while authenticating you, if this issue persists, please contact us through our help center at help.openai.com 说明&#xff1a;哎呀&#xff01;我们在验证您的身份时遇到了一个问题&#xff0c;如果这个问题仍然存在&#xff…

Linux:shell脚本:基础使用(8)《函数局部|全局变量函数传入位置变量return》

基本的函数定义 把一些重复调用的命令写进一个函数里&#xff0c;下次直接调用函数名&#xff0c;这样的既方便修改&#xff0c;又可以让思路清晰 function 函数名(){ 当调用这个函数时候执行的命令...... } 这个是一个基础的函数定义&#xff0c;当然你不加function也是可以的…

从 GPT1 - GPT4 拆解

从 GPT1 - GPT4 拆解 从 GPT1 - GPT4GPT1&#xff1a;更适用于文本生成领域GPT2&#xff1a;扩展数据集、模型参数&#xff0c;实现一脑多用&#xff08;多个任务&#xff09;GPT3&#xff1a;元学习 大力出奇迹InstructGPT&#xff1a;指示和提示学习 人工反馈强化学习 RLHF…

实验二 体系结构

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

Open3D 点云转深度图像

目录 一、算法原理1、算法过程2、主要函数二、代码实现三、结果展示1、点云2、深度图像四、测试数据Open3D 点云转深度图像由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。<

TypeScript 中的深拷贝和浅拷贝

什么是深拷贝 在JavaScript/TypeScript中&#xff0c;深拷贝是指创建一个对象的副本&#xff0c;而不仅仅是创建对原始对象的引用。对复制的对象进行的任何更改都不会影响原始对象&#xff0c;反之亦然。 这个副本将完全复制基础对象&#xff0c;包括每个嵌套级别的所有属性和…

在vite5和vue3开发环境中使用jodit4富文本编辑器,并添加自定义插件和使用highlight.js实现代码块高亮(附其他自定义配置项和全部代码)

最近富文本编辑器jodit终于更新发布到了4.0版本&#xff0c;加入了css变量、有更好的typescript支持&#xff0c;截止发文时的版本是&#xff1a;4.0.5&#xff0c;看到有了新版本于是便想着将本地项目中的jodit版本也进行升级&#xff0c;琢磨着再丰富和添加一些功能&#xff…

excel 各种用法

excel 各种用法 实现两张表格数据关联 vlookup 实现两张表格数据关联 vlookup 实现两个 sheet 间的关联需要用 vlookup 函数实现 函数第一个参数设置成 sheet1 中的 A 列&#xff08;如果数据很多&#xff0c;可以直接选中 A 列&#xff09; 函数的第二个参数选中 sheet2 中…

android 和 opencv 开发环境搭建

本文详细说明给android项目添加opencv库的详细步骤&#xff0c;并通过实现图片灰度化来查看配置是否成功。 下载OPENCV ANDROID SDK 到官网下载 打开 https://opencv.org/releases/ 选择android&#xff0c;下载完成后解压出下面的文件&#xff1a; 安装android sdk 和 ndk …

YOLOv8全网首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv8结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

【CSS】解决height = line-height 文字不垂直居中(偏上、偏下)的问题

解决办法1&#xff1a; 查看 font-family 属性&#xff0c;确认是否是因为字体而导致的不垂直居中问题。 其他小知识&#xff1a; 基线就是小写x字母的下边缘(线) 就是我们常说的 基线。line-height 属性设置的行高也就是定义的两行文字基线之间的距离! 参考文章&#xff1a;…

2017年认证杯SPSSPRO杯数学建模B题(第一阶段)岁月的印记全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 跨年龄人脸识别模型的建立与分析 B题 岁月的印记 原题再现&#xff1a; 对同一个人来说&#xff0c;如果没有过改变面容的疾病、面部外伤或外科手术等经历&#xff0c;年轻和年老时的面容总有很大的相似性。人们在生活中也往往能够分辨出来两…

Java 方法中参数类型后写了三个点?什么意思?

1、...代表什么意思&#xff1f; 2、如何使用 3、注意事项 4、两个list&#xff0c;一个新的&#xff0c;一个旧的&#xff0c;旧列表中可能有新列表中存在的数据&#xff0c;也可能存在新列表中不存在的数据&#xff08;注&#xff1a;新旧列表中都不存在重复元素&#xff09;…