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个不同路径下的配置文件:

  1. 项目根目录下的config目录。

  2. 项目根目录。

  3. classpath下的config目录。

  4. 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配置文件时需要注意以下几点:

  1. 属性值和冒号中间必须有空格,如name: Weiz正确,使用name:Weiz就会报错。
  2. 需要注意各属性之间的缩进和对齐。
  3. 缩进不允许使用tab,只允许空格。
  4. 属性和值区分字母大小写。

数据类型

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
        -wanger
    

    还可以采用行内写法,数组使用中括号的形式,例如:

    persons: [zhangsan,lisi,wangwu]
    

    我们可以看到,YML文件除了支持基本的数据类型之外,还支持对象、Map、json、数组等格式,这样可以在配置文件中直接定义想要的数据类型,推荐用yml格式。

    Properties与YML配置文件的区别

    1. YML文件以数据为中心,对于数据的支持和展现非常友好。
    2. Properties文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求比较高,缩进格式不对时容易出错。
    3. Properties文件支持@PropertySource注解,而YML文件不支持。
    4. YML文件支持多文档块的使用方式,使用起来非常灵活。
    5. 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

Spring Boot Learning(配置文件)

从 Shell 脚本优雅地关闭 Spring Boot 应用程序

Spring Boot的特性: 自定义日志配置