Spring Boot中的配置文件起到了非常重要的作用。在Spring Boot中,可以通过配置文件来配置应用程序的一系列属性,包括数据库连接、服务器端口号、日志级别等等。通过配置文件,可以方便地对应用程序进行配置管理和集中管理。另外,Spring Boot中还支持多种配置文件格式,包括properties、yaml、json等,可以根据实际情况选择使用适合自己的配置文件格式。同时,Spring Boot还提供了一系列注解和工具类,可以方便地读取和解析配置文件的内容,使配置文件的使用变得更加简单和灵活。
1. 配置文件的作用
整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:
1)数据库的连接信息(包含⽤户名和密码的设置);
2)项⽬的启动端⼝;
3)第三⽅系统的调⽤秘钥等信息;
4)⽤于发现和定位问题的普通⽇志和异常⽇志等。
2.配置文件的格式
Spring Boot 配置文件主要分为两种格式
1) .properties
2) .yml(.yaml)
Spring 有个自动识别的
并且这两种后缀是可以同时存在的,我们来看看:
在Spring Boot中,可以同时使用.yml和.properties文件作为配置文件,但是如果同时存在相同的配置属性,以.properties文件中的属性为准。因为Spring Boot会首先加载.properties文件,然后再加载.yml文件,如果存在相同的属性,后面加载的.yml文件不会覆盖前面加载的.properties文件中的属性。如果想要优先使用.yml文件中的配置,可以在application.properties文件中添加以下配置:
spring.config.name=application
当yaml和properties文件同时存在于Spring Boot应用程序的classpath下时,加载顺序是以文件名的字母顺序为准的。具体来说,Spring Boot首先会加载所有以application.properties结尾的文件,然后再加载以application.yml结尾的文件。如果两个文件名相同,则yaml文件的优先级高于properties文件。
例如,如果同时存在application.properties和application.yml文件,则Spring Boot会首先加载application.properties文件,然后再加载application.yml文件。如果存在greeting.properties和greeting.yml文件,则Spring Boot会首先加载greeting.properties文件,然后再加载greeting.yml文件。但是,如果存在greeting.properties和greeting.yaml文件,则Spring Boot会首先加载greeting.yaml文件,因为yaml文件的字母顺序要比properties文件高。
我们来试试看:
补充另外一种情况: 在只有yml和yaml情况下,以yml为准。
2.1 两种格式对比
properties
properties 链接案例:
spring.datasource.url=jdbc:mysql://localhost:3306/database_name
spring.datasource.username=root
spring.datasource.password=123456
缺点
yml
所以我们之前写的 yaml 也是可行的。
yml 优点分析:
-
yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
-
yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩ 符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
-
yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl 中
yml基本语法:
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password:
3. ⽇志⽂件
1. 日志有啥用?
- 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
- 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
- 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持
2. 简单配置
如果不需要进行复杂的日志配置,则在配置文件中进行简单的日志配置即可,默认情况下,SpringBoot日志只记录到控制台,不写日志文件。如果希望在控制台输出之外编写日志文件,则需要在 application.yml 配置文件中进行配置
logging:
file:
name: D:/Projects/spring-test.log # 日志文件绝对路径及名称
level:
root: info #日志级别 root表示所有包,也可以单独配置具体包 fatal>error>warn>info>debug>trace>off
注意: Spring Boot中的logging.path和logging.file这2个属性,只需要配置其中之一即可,如果同时配置,则使用logging.file属性。
当配置了loggin.path属性时,将在该路径下生成spring.log文件,即:此时使用默认的日志文件名spring.log
当配置了loggin.file属性时,将在指定路径下生成指定名称的日志文件。默认为项目相对路径,可以为logging.file指定绝对路径
3. 如何在程序中得到日志对象
在程序中获取日志对象需要使用到日志工厂: LoggerFactory
得到日志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才方便、更直观的定位到问题类
这里需要注意, Logger 对象是属于 org.slf4j 包下的,不要导错了。
4. ⽇志级别
4.1 日志级别有啥用?
- ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇ 志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
- ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息, ⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。
4.2 日志级别分类:
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认⽇志级别);
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;
- fatal:致命的,因为代码异常导致程序退出执⾏的事件。
⽇志级别设置
日志级别配置只需要在配置文件中设置 “ logging.level ” 配置项即可:
logging:
level:
root: error
5. 更简单的日志输出 -- lombok
- 添加 lombok 框架支持
- 使用 @slf4j 注解输出日志
添加依赖:
5.1 输出日志
举例:
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {
@RequestMapping("/log")
public void loggerTest() {
log.error("------------------- error -----------------");
}
}
当我们访问这个 web 网页时:
他就会打印出这个日志。
总结:
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息;
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;
- fatal:致命的,因为代码异常导致程序退出执⾏的事件。