Spring Boot系统配置文件application.properties和application.yml
Posted 是馄饨呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot系统配置文件application.properties和application.yml相关的知识,希望对你有一定的参考价值。
文章目录
1. 系统配置文件application.properties和application.yml
Spring Boot 支持两种不同格式的配置文件:一种是Properties,另一种是YML。
Spring Boot 默认使用 application.properties作为系统配置文件,项目创建成功后会默认在 resource 目录下生成 application.properties。
application.properties文件
1.基本格式
配置格式如下:
# 服务器端口配置
server.port=8081
当前配置了应用启动端口为 8081,如果不配置此项,则默认使用8080端口。
properties 文件中的配置项是无序的,为了保证配置文件清晰易读,可以把相关配置放到一起。
2. 配置文件加载顺序
Spring Boot项目的配置文件默认存放在resources目录中。实际上,Spring Boot系统启动时会读取4个不同路径下的配置文件:
-
项目根目录下的config目录。
-
项目根目录。
-
classpath下的config目录。
-
classpath目录。
Spring Boot会从这4个位置全部加载主配置文件,这4个位置中的application.properties文件的优先级按照上面列出的顺序依次降低。如果同一个属性都出现在这4个文件中,则以优先级高的文件为准。
3. 修改默认配置文件名
项目默认的配置文件名为application.properties,我们可以通过修改项目启动类,,调用SpringApplicationBuilder
类的properties()方法来实现自定义配置文件名称。
@SpringBootApplication
public class HelloworldApplication
public static void main(String[] args)
// SpringApplication.run(HelloworldApplication.class, args);
new SpringApplicationBuilder(HelloworldApplication.class).properties("spring.config.location=classpath:/application_test.properties").run(args);
在这里我新添了一个application_test.properties
文件,端口号改为 8081,运行后发现端口也已经变了。
application.yml 文件
application.yml 以yml为后缀,使用YAML(YAML Ain’t a MarkupLanguage)的配置文件。与XML等标记语言相比,YMAL结构更清晰易读,更适合用作属性配置文件。
基本格式
YML基本语法为key:(空格)value的键值对形式,冒号后面必须加上空格。通过空格的缩进来控制属性的层级关系,只要是左对齐的一列数据,都是同一个层级的。
比如下面这样:
# 日志配置
logging:
level:
root:warn
file:
max-history: 30
max-size: 10MB
path: /var/log
如上所示,我们自定义配置了系统的日志级别、文件路径等属性。
YML文件虽然格式简洁直观,但是对格式要求较高,使用YML配置文件时需要注意以下几点:
- 属性值和冒号中间必须有空格,如name: Weiz正确,使用name:Weiz就会报错。
- 需要注意各属性之间的缩进和对齐。
- 缩进不允许使用tab,只允许空格。
- 属性和值区分字母大小写。
数据类型
YML文件以数据为中心,支持数组、JSON对象、Map等多种数据格式,因此更适合用作配置文件。
-
普通的值(数字、字符串、布尔值)普通的数据通过k:v的键值对形式直接编写,普通的值类型或字符串默认不用加上单引号或者双引号。当然,也可以使用双引号("")来转义字符串中的特殊字符,特殊字符转义后就表示它自身的意思,例如:
name: "zhangsan \\n lisi"
上面就会输出
zhangsan
lisi
使用单引号(’’)不会转义特殊字符,所有字符都按照普通字符处理,作为字符串数据,例如:
name: 'zhangsan \\n lisi'
上面的示例会输出:zhangsan \\n lisi。“\\n”字符作为普通的字符串,而不转义为换行。
-
对象、map(属性和值)
对象同样是以k:v的键值对方式展现的,只是对象的各个属性和值的关系通过换行和缩进方式来编写。例如:
person: lastName: zhangsan age: 20
如果使用行内写法,可以将对象的属性和值写成JSON格式,例如:
person: lastName: zhangsan,age: 20
-
数组(List、Set)
数组是以-value的形式表示数组中的元素的,例如
persons: - zhangsan - lisi -wanger
还可以采用行内写法,数组使用中括号的形式,例如:
persons: [zhangsan,lisi,wangwu]
我们可以看到,YML文件除了支持基本的数据类型之外,还支持对象、Map、json、数组等格式,这样可以在配置文件中直接定义想要的数据类型,推荐用yml格式。
Properties与YML配置文件的区别
- YML文件以数据为中心,对于数据的支持和展现非常友好。
- Properties文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求比较高,缩进格式不对时容易出错。
- Properties文件支持@PropertySource注解,而YML文件不支持。
- YML文件支持多文档块的使用方式,使用起来非常灵活。
- Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。
以上是关于Spring Boot系统配置文件application.properties和application.yml的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot系统配置文件application.properties和application.yml
Spring boot:从文件系统加载配置文件特定的 application.properties
根据环境变量设置 Spring Boot application.properties