首页 > 编程笔记 > Java笔记

Spring Boot系统配置文件详解

本节讲述 Spring Boot 的系统配置文件,包括 application.properties 和 application.yml 配置文件的使用,以及 YML 和 Properties 配置文件有什么区别。

application.properties

Spring Boot 支持两种不同格式的配置文件:一种是 Properties,另一种是 YML。

Spring Boot 默认使用 application.properties 作为系统配置文件,项目创建成功后会默认在 resources 目录下生成 application.properties 文件。该文件包含 Spring Boot 项目的全局配置。我们可以在 application.properties 文件中配置 Spring Boot 支持的所有配置项,比如端口号、数据库连接、日志、启动图案等。

1) 基本语法

Spring Boot 项目创建成功后会默认 resources 目录下会自动创建 application.properties文件。使用也非常简单,配置格式如下:
# 服务器端口配置
server.port=8081
在上面的示例中配置了应用的启动端口。如果不配置此项,则默认使用 8080 端口;如果需要使用其他端口,则通过 server.port=8081 修改系统启动端口。

此外,Properties 文件中的配置项可以是无序的,但是为了保证配置文件清晰易读,建议把相关的配置项放在一起,比如:
# 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
以上示例将 thymeleaf 模板相关的配置放在一起,这样看起来清晰明了,从而便于快速找到 thymeleaf 的所有配置。

2) 配置文件加载顺序

Spring Boot 项目的配置文件默认存放在 resources 目录中。实际上,Spring Boot 系统启动时会读取 4 个不同路径下的配置文件:
Spring Boot 会从这 4 个位置全部加载主配置文件,这 4 个位置中的 application.properties 文件的优先级按照上面列出的顺序依次降低。如果同一个属性都出现在这 4 个文件中,则以优先级高的文件为准。

3) 修改默认配置文件名

可能有人会问,项目的配置文件必须命名为 application.properties 吗?当然不是,我们可以通过修改项目启动类,调用 SpringApplicationBuilder 类的 properties() 方法来实现自定义配置文件名称。

示例代码如下:
new SpringApplicationBuilder(ApplicationDemo.class)
           .properties("spring.config.location=classpath:/ application.propertie").run(args);
在上面的示例中,Spring Boot 项目启动加载时默认读取更改名称的配置文件,即可修改默认加载的 application.yml 文件名。

application.yml

application.yml 是以 yml 为后缀,使用 YAML(YAML Ain't a Markup Language)的配置文件。与 XML 等标记语言相比,YMAL 结构更清晰易读,更适合用作属性配置文件。

1、基本语法

YML 基本语法为 key:(空格)value 的键值对形式,冒号后面必须加上空格。通过空格的缩进来控制属性的层级关系,只要是左对齐的一列数据,都是同一个层级的。

具体格式如下:
# 日志配置
logging:
  level:
    root: warn
  file:
    max-history: 30
    max-size: 10MB
    path: /var/log
在上面的示例中,自定义配置了系统的日志级别、文件路径等属性。可以看到 logging 下包含 level 和 file 两个子配置项。

YML 文件虽然格式简洁直观,但是对格式要求较高,使用 YML 配置文件时需要注意以下几点:

2、数据类型

YML 文件以数据为中心,支持数组、JSON 对象、Map 等多种数据格式,因此更适合用作配置文件。

1) 普通的值(数字、字符串、布尔值)

普通的数据通过k:v的键值对形式直接编写,普通的值类型或字符串默认不用加上单引号或者双引号。

当然,也可以使用双引号("")来转义字符串中的特殊字符,特殊字符转义后就表示它自身的意思,例如:
name: "zhangsan \n lisi"
上面的示例会输出:

zhangsan
lisi

使用单引号('')不会转义特殊字符,所有字符都按照普通字符处理,作为字符串数据,例如:
name: 'zhangsan \n lisi'
上面的示例会输出:zhangsan \n lisi。“\n”字符作为普通的字符串,而不转义为换行。

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]
我们可以看到,YML 文件除了支持基本的数据类型之外,还支持对象、Map、JSON、数组等格式,这样可以在配置文件中直接定义想要的数据类型,无须额外转换。这也是程序员喜欢用 application.yml 的原因之一。

Properties与YML配置文件的区别

Spring Boot 中的配置文件有 Properties 或者 YML 两种格式。一般情况下,两者可以随意使用,我们可以根据自己的使用习惯选择适合的配置文件格式。这两者完全一样吗?肯定不是,YML 和 Properties 配置文件的区别如下:

实战:自定义系统的启动图案

我们知道 Spring Boot 程序启动时,控制台会输出由一串字符组成的 Spring 符号的启动图案(Banner)以及版本信息(见下图)。


图 1 Spring Boot程序默认的后台启动画面

Spring Boot 自带的启动图案是否可以自定义呢?答案是肯定的。下面通过示例来演示如何自定义 Spring Boot 的启动图案。

1) 在项目的 resources 目录下新建 banner.txt,示例代码如下:
${AnsiColor.BRIGHT_YELLOW}
##     ## ###### ##       ##        #######
##     ## ##     ##       ##       ##     ##
##     ## ##     ##       ##       ##     ##
######## ######  ##       ##       ##     ##
##     ## ##     ##       ##       ##     ##
##     ## ##     ##       ##       ##     ##
##     ## ###### ####### #######  #######
${AnsiColor.BRIGHT_RED}
Application Name: ${application.title}
Application Version: ${application.formatted-version}
Spring Boot Version: ${spring-boot.formatted-version}

在上面的配置中,通过 ${} 获取 application.properties 配置文件中的相关配置信息,如 Spring Boot 版本、应用的版本、应用名称等信息:
2) 在 application.properties 中配置 banner.txt 的路径等信息。
# 指定Banner 配置文件的位置
spring.banner.location=/banner.txt
# 是否显示横幅图案
# 可选值有3个,一般不需要修改
# console:显示在控制台
# log:显示在文件
# off:不显示
# spring.main.banner-mode=console
application.version=1.0.0.0
application.formatted-version=v1.0.0.0
spring-boot.version=2.1.2.RELEASE
spring-boot.formatted-version=v2.1.2.RELEASE
application.title=My App
在上面的配置中,在 application 中设置 banner.txt 文件的路径、应用的版本、Spring Boot 的版本等信息。

3) 启动项目,查看修改之后的启动横幅图案是否生效,如下图所示。


图 2 Spring Boot程序默认的后台启动画面

通过系统输出的启动日志可以看到,系统的启动图案已经变成我们自定义的样子,也就是 Spring Boot 的默认启动图案已经更改成自定义的启动图案。

Spring Boot 也支持使用 GIF、JPG 和 PNG 格式的图片文件来定义横幅图案。当然,并不会把图片直接输出在控制台上,而是将图片中的像素解析并转换成 ASCII 编码字符之后再输出到控制台上。

声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。