第3章 Spring Boot 的系统配置
3.1 Spring Boot 系统配置文件
3.2 Spring Boot 自定义配置项
3.3 Spring Boot 其他配置
3.4 Spring Boot 日志配置
3.5 实战:Spring Boot 实现系统多环境配置
3.1 Spring Boot 系统配置文件
3.1.1 application.properties
1、基本语法
# 服务器端口配置
server.port=8081
# thymeleaf 模板
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
2、配置文件加载顺序
【理论介绍】
配置文件加载顺序:
1. 项目根目录下的config目录。【优先级最高】
2. 项目根目录。
3. classpath下的config目录。
4. classpath目录(新建项目时application.properties默认所在位置)。【优先级最低】
备注:
- 加载顺序:4 -> 3 -> 2 -> 1。
- 优先级:逐渐减低(1>2>3>4)。
【举例说明】
项目结构示例:
1. 项目根目录下的config目录(file:./config/):helloworld/config/
2. 项目根目录(file:./):helloworld/
3. classpath下的config目录(classpath:/config/):helloworld/src/main/resources/config/
4. classpath目录(classpath:/):helloworld/src/main/resources/
备注:
加载顺序:4 -> 3 -> 2 -> 1。
优先级:逐渐减低(1>2>3>4)。
启动命令
$ java -jar helloworld-0.0.1-SNAPSHOT.jar
指定配置文件的启动命令
$ java -jar helloworld-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/application.properties
扩展:
(1)指定配置文件名称(如指定配置文件为helloworldApplication.properties):
$ java -jar helloworld-0.0.1-SNAPSHOT.jar --spring.config.name=helloworldApplication
(2)指定两个配置文件,后一个覆盖前一个中相同的属性项(前后两个文件都有的属性项,覆盖前一个属性项,使用后一个属性项;前一个有而后一个没有的属性项,使用前一个的属性项):
$ java -jar helloworld-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
3、修改默认配置文件名
项目的配置文件必须命名为application.properties吗?当然不是,我们可以通过修改项目启动类,调用SpringApplicationBuilder类的properties()方法来实现自定义配置文件名称。示例代码如下:
@SpringBootApplication
public class HelloworldApplication {
// 修改默认配置文件名
public static void main(String[] args) {
new SpringApplicationBuilder(HelloworldApplication.class)
.properties("spring.config.location=classpath:/application.properties")
.run(args);
}
}
3.1.2 application.yml
application.yml是以 yml 为后缀,使用 YAML(YAML Ain‘t a Markup Language)的配置文件。
1、基本语法
YML基本语法为key:(空格)value的键值对形式,冒号后面必须加上空格。
通过空格的缩进来控制属性的层级关系,只要是左对齐的一列数据,都是同一个层级的。
application.yml
# 日志配置
logging:
level:
# 指定整个项目的日志级别
root: INFO
# 对某个包指定单独的日志级别
#com.example.helloworld.controller: debug
file:
max-history: 30
max-size: 10MB
# 指定输出日志文件(默认日志文件名为spring.log)存放位置。
# /var/log:当前磁盘根目录下的/var/log目录,如:E:/var/log
# ./var/log:当前项目根目录下的/var/log目录,如:helloworld/var/log
path: /var/log
YAML基本语法:
(1)冒号和属性值中间必须有空格,如name: zhangsan正确,使用name:zhangsan就会报错。
(2)属性和值都区分大小写(大小写敏感)。
(3)使用缩进表示层级关系,缩进的空格不重要,只用相同层级的元素左对齐即可。
(4)缩进不予许使用tab,只允许空格。
(5)'#'表示注释
2、数据类型
(1)普通的值(数字、字符串、布尔值)
普通的数据通过k: v的键值对形式直接编写,普通的值类型或字符串默认不用加上单引号或者双引号。
# 数字
a: 1
# 字符串
b: helloworld
# 布尔值
c: true
也可以使用双引号(“”)来转义字符串中的特殊字符,如下:
name: "zhangsan \n lisi"
上面的示例会输出:
zhangsan
lisi
备注:使用单引号(‘’)不会转义特殊字符,所有字符都按照普通字符处理,作为字符串数据。
(2)对象、Map(属性和值)
对象同样是以k: v的键值对方式展现,只是对象的各个属性和值的关系通过换行和缩进方式来编写。
person:
lastName: zhangsan
age: 20
如果使用行内写法,可以将对象的属性和值写成JSON格式。
person: {lastName: zhangsan,age: 20}
(3)数组(List、Set)
数组是以- value的形式表示数组中的元素的。
persons:
- zhangsan
- lisi
- wangwu
还可以采用行内写法,数组使用中括号的形式。
persons: [zhangsan, lisi, wangwu]
3.1.3 Properties 与 YML 配置文件的区别
Spring Boot中的配置问阿金有Properties或者YML两种格式。一般情况下两者可以随意使用,可以根据自己的使用习惯选择适合的配置文件格式。
YML和Properties配置文件的区别如下:
(1)YMl文件以数据为中心,对于数据的支持和展现非常友好。
(2)YML文件支持多文档块的使用方式,使用起来非常灵活。
(3)Properties文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求非常高,缩进格式不对时容易出错。
(4)Properties文件支持@PropertySource注解,而YML文件不支持。
(5)Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。
3.1.4 实战:自定义系统的启动图案
Spring Boot 程序启动时,控制台会输出有一串字符组成的Spring符号的启动图案(Banner)以及版本信息。如下图(Spring Boot 程序默认的后台启动画面):
下面通过示例来演示如何自定义 Spring Boot 的启动图案。
(1)在resource目录下新建banner.txt。
banner.txt
${AnsiColor.BRIGHT_YELLOW}
## ## ###### ## ## ########
## ## ## ## ## ## ##
## ## ## ## ## ## ##
######## ###### ## ## ## ##
## ## ## ## ## ## ##
## ## ## ## ## ## ##
## ## ###### ####### ####### ########
${AnsiColor.BRIGHT_RED}
Application Name: ${application.title}
Application Version: ${application.formatted-version}
Spring Boot Version: ${spring-boot.formatted-version}
(2)在application.properties中配置banner.txt的路径等信息。
application·properties
# 指定Banner配置文件的位置
spring.banner.location=/banner.txt
# 是否显示横幅图案:可选值有3个,一般不需要修改。(console:显示在控制台, log:显示在文件, off:不显示)
spring.main.banner-mode=log
# 设置应用名称、应用的版本、Spring Boot的版本
application.title=My App
application.version=1.0.0.0
application.formatted-version=v1.0.0.0.0
spring-boot.version=2.7.5
spring-boot.formatted-version=v2.7.5
(3)启动项目,查看修改之后的启动横幅图案是否生效。
来源:《Spring Boot 从入门到实战》学习笔记