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.mzph.cn/news/632410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MIdjourney】一些材质相关的关键词

1.多维剪纸(Multidimensional papercut) "Multidimensional papercut"(多维剪纸)是一种剪纸艺术形式,通过多层次的剪纸技巧和设计来创造出立体感和深度感。这种艺术形式通常涉及在不同的纸层上剪裁不同的图案,并将它们…

蓝桥杯真题(Python)每日练Day1

说明:在CSP认证的基础上(可以看看本人CSP打卡系列的博客)备赛2024蓝桥杯(Python),本人专业:大数据与数据科学 因此对python要求熟练掌握,通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…

Vue表单输入密码实现密码格式和强度验证提示框-demo

实现效果 实现过程 校验 //密码格式校验 const validateUppercase (rule, value, callback) > {if (!/[A-Z]/.test(value)) {callback(new Error(密码必须包含至少一个大写字母));} else {callback();} }; const validateNumber (rule, value, callback) > {if (!/\d…

【论文简介】个性化真实人像生成方法(2024.01.15发布,即将开源)

零样本身份保留生成方法:声称效果好于PhotoMaker(即将开源) 2401.InstantID: Zero-shot Identity-Preserving Generation in Seconds : 项目主页:https://instantid.github.io/ 一、简介 本文的主要内容是介绍了一种…

【驱动】I2C驱动分析(二)-驱动框架

I2C驱动框架简介 I2C 驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,系统的整体框架如下所示。 最上层是应用层,在应用层用户可以直接用open read write对设备进行操作,往下是设备驱动层&a…

Jenkins的环境部署,(打包、发布、部署、自动化测试)

一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk1.8.0_18…

CSS笔记II

CSS第二天笔记 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 三大特性继承性层叠性优先级优先级-叠加计算规则 Emmet写法 背景属性背景图平铺方式位置缩放固定复合属性 显示模式转换显示模式 复合选择器 定义:由两个或多个基础选择器,通…

LeetCode19:删除链表的倒数第N个结点

力扣题目链接 思路:由于本题有可能删除头结点,为保证删除头结点和其他结点的操作一致,因此首先创建一个虚拟头结点dummy。 其次,本题需要删除倒数第N个结点,由于单链表只有next指针,因此需要找到倒数第N1…

力扣精选算法100题——找到字符串中所有字母异位词(滑动窗口专题)

本题链接👉找到字符串中所有字母异位词 第一步:了解题意 给定2个字符串s和p,找到s中所有p的变位词的字串,就是p是"abc",在s串中找到与p串相等的字串,可以位置不同,但是字母必须相同,比…

橘子学K8S04之重新认识Docker容器

我们之前分别从 Linux Namespace 的隔离能力、Linux Cgroups 的限制能力,以及基于 rootfs 的文件系统三个角度来理解了一下关于容器的核心实现原理。 这里一定注意说的是Linux环境,因为Linux Docker (namespaces cgroups rootfs) ! Docker on Mac (bas…

Mybatis面试题(一)

MyBatis 面试题 1、什么是 Mybatis? 1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程…

在PyCharm中创建Flask项目

在 PyCharm 中创建 Flask 项目的步骤如下: 打开 PyCharm,并选择 "Create New Project"(新建项目)。在弹出的窗口中,选择左侧的 "Python" 选项,然后选择右侧的 "Flask" 项目…

【开发实践】前端jQuery+gif图片实现载入界面

一、需求分析 载入界面(Loading screen)是指在计算机程序或电子游戏中,当用户启动应用程序或切换到新的场景时,显示在屏幕上的过渡界面。它的主要作用是向用户传达程序正在加载或准备就绪的信息,以及提供一种视觉上的反…

(C语言)冒泡排序

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现buble_sort函数&#xff1b; void buble_sort(int arr[], int sz) {//初始化变量值&#xff1b;int i 0;//嵌套循环冒泡排序&#xff1b;//外层循环&…

基于SSM的在线宠物商城设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

Spring MVC学习——解决请求参数中文乱码

解决请求参数中文乱码问题 1.POST请求方式解决乱码问题 在web.xml里面设置编码过滤器 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><…

react native Gradle的原国外地址、本地下载、国内阿里腾讯镜像三种下载配置

一、国外地址&#xff1a;&#xff08;初始项目默认&#xff09; 下载地址&#xff1a;https://services.gradle.org/distributions/ 文件地址见下图&#xff1a; 注意&#xff1a;这个地址下载十次就有九次是连接超时&#xff0c;建议换另外两种方法 二、下载到本地&#x…

查看pip及Python版本

Python环境正确安装之后&#xff0c;按“WinR”组合键打开“运行”对话框&#xff0c;输入“cmd”&#xff0c;如下图 打开命令提示符窗口后&#xff0c;输入以下命令查看Python及pip的版本。 pip -V 如果命令提示符窗口能够正确显示pip及Python版本&#xff0c;则说明Python…

Mybatis之关联

一、一对多关联 eg&#xff1a;一个用户对应多个订单 建表语句 CREATE TABLE t_customer (customer_id INT NOT NULL AUTO_INCREMENT, customer_name CHAR(100), PRIMARY KEY (customer_id) ); CREATE TABLE t_order ( order_id INT NOT NULL AUTO_INCREMENT, order_name C…

【备战蓝桥杯】吃奶酪问题 / 超硬核,文附template拓展知识!

蓝桥杯备赛 | 洛谷做题打卡day9 文章目录 蓝桥杯备赛 | 洛谷做题打卡day9再来了解一下状压dp**简介(Introduction)****描述(Description)** - 吃奶酪题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模与约定提示 * template拓展知识我的一些话 【引入】今天…