Spring Boot系统配置文件详解
本节讲述 Spring Boot 的系统配置文件,包括 application.properties 和 application.yml 配置文件的使用,以及 YML 和 Properties 配置文件有什么区别。
Spring Boot 默认使用 application.properties 作为系统配置文件,项目创建成功后会默认在 resources 目录下生成 application.properties 文件。该文件包含 Spring Boot 项目的全局配置。我们可以在 application.properties 文件中配置 Spring Boot 支持的所有配置项,比如端口号、数据库连接、日志、启动图案等。
此外,Properties 文件中的配置项可以是无序的,但是为了保证配置文件清晰易读,建议把相关的配置项放在一起,比如:
Spring Boot 会从这 4 个位置全部加载主配置文件,这 4 个位置中的 application.properties 文件的优先级按照上面列出的顺序依次降低。如果同一个属性都出现在这 4 个文件中,则以优先级高的文件为准。
示例代码如下:
具体格式如下:
YML 文件虽然格式简洁直观,但是对格式要求较高,使用 YML 配置文件时需要注意以下几点:
当然,也可以使用双引号("")来转义字符串中的特殊字符,特殊字符转义后就表示它自身的意思,例如:
图 1 Spring Boot程序默认的后台启动画面
Spring Boot 自带的启动图案是否可以自定义呢?答案是肯定的。下面通过示例来演示如何自定义 Spring Boot 的启动图案。
1) 在项目的 resources 目录下新建 banner.txt,示例代码如下:
在上面的配置中,通过 ${} 获取 application.properties 配置文件中的相关配置信息,如 Spring Boot 版本、应用的版本、应用名称等信息:
2) 在 application.properties 中配置 banner.txt 的路径等信息。
3) 启动项目,查看修改之后的启动横幅图案是否生效,如下图所示。
图 2 Spring Boot程序默认的后台启动画面
通过系统输出的启动日志可以看到,系统的启动图案已经变成我们自定义的样子,也就是 Spring Boot 的默认启动图案已经更改成自定义的启动图案。
Spring Boot 也支持使用 GIF、JPG 和 PNG 格式的图片文件来定义横幅图案。当然,并不会把图片直接输出在控制台上,而是将图片中的像素解析并转换成 ASCII 编码字符之后再输出到控制台上。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
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 个不同路径下的配置文件:- 项目根目录下的 config 目录。
- 项目根目录。
- classpath 下的 config 目录。
- classpath 目录。
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 配置文件时需要注意以下几点:
- 属性值和冒号中间必须有空格,如 name: Weiz 正确,使用 name:Weiz 就会报错;
- 需要注意各属性之间的缩进和对齐;
- 缩进不允许使用 tab,只允许空格;
- 属性和值区分字母大小写。
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 配置文件的区别如下:- YML 文件以数据为中心,对于数据的支持和展现非常友好;
- Properties 文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求比较高,缩进格式不对时容易出错;
- Properties 文件支持 @PropertySource 注解,而YML文件不支持;
- YML 文件支持多文档块的使用方式,使用起来非常灵活;
- Properties 配置的优先级高于 YML 文件。因为 YML 文件的加载顺序先于 Properties 文件,如果两个文件存在相同的配置,后面加载的 Properties 中的配置会覆盖前面 YML 中的配置。
实战:自定义系统的启动图案
我们知道 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 版本、应用的版本、应用名称等信息:
- ${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色,可以自定义,具体参考 org.springframework.boot.ansi.AnsiColor;
- ${application.version}:用来获取 MANIFEST.MF 文件中的版本号,这就是在 Application.java 中指定 SpringVersion.class 的原因;
- ${application.formatted-version}:格式化后的 {application.version} 版本信息;
- ${spring-boot.version}:Spring Boot 的版本号;
- ${spring-boot.formatted-version}:格式化后的 {spring-boot.version} 版本信息。
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笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。