SpringBoot配置文件详解

本文最后更新于:1 年前

SpringBoot默认配置文件为application.properties,通过键值对配置对应属性。此外还支持另外两种格式的配置文件,分别为:

  • yml格式(主流格式)
  • yaml格式

配置文件优先级为:application.properties > application.yml > application.yaml。不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。


常用属性配置

SpringBoot默认配置文件为application.properties,通过键值对配置对应属性。

  • 修改服务器端口

    1
    server.port=80
  • 关闭运行日志图标(banner)

    1
    2
    spring.main.banner-mode=off
    # spring.banner.image.location=girls.png
  • 设置日志相关

    1
    2
    logging.level.root=DEBUG
    # logging.level.cc.gaojie=WARN

SpringBoot更多内置属性查询:

配置文件分类

SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。分别如下:

  • properties格式
  • yml格式(主流格式)
  • yaml格式

IDEA中配置文件的自动提示功能消失时,可按如下步骤指定SpringBoot配置文件:『Setting → Project Structure → Facets → 选中对应项目/工程 → Customize Spring Boot → 选择配置文件』。

配置文件优先级

按上面的配置,启动后发现目前的启动端口为80,把80对应的文件删除掉,然后再启动,现在端口又改成了81。因此3个文件的加载优先顺序如下:

1
application.properties  >  application.yml  >  application.yaml

进一步实验我们会发现,其实每个配置文件中的项都会生效,只不过如果多个配置文件中有相同类型的配置,优先级高的文件会覆盖优先级低的文件中的配置。如果配置项不同的话,那所有的配置项都会生效。即不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。

yaml 文件详解

yaml 语法规则

核心规则:数据前面要加空格与冒号隔开

字面值表示方式

数组表示方式

在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔。

特殊字符格式

如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析。

1
lesson: "Spring\tboot\nlesson"      #加双引号后转义字符才会生效,\t \n

yaml中数据引用

在yaml配置文件中可以使用${属性名}的方式引用属性值。

yaml 数据读取

读取单一数据

  • 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
  • 如果数据存在多层级,依次书写层级名称即可。

读取全部数据

SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做 Environment,使用自动装配注解@Autowired可以将所有的yaml数据封装到这个对象中。

  • 使用Environment对象封装全部配置信息
  • 使用@Autowired注解自动装配数据到Environment对象中

获取属性时,通过Environment的接口操作进行,具体方法为 getProperties(String key),参数填写属性名即可:

读取对象数据

很多情况下,我们会将一组数据封装成一个对象。SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的操作。

  • 使用@ConfigurationProperties注解绑定配置信息到封装类中(指定该对象加载yaml中哪一组配置的信息)
  • 封装类需要定义为Spring管理的bean,否则无法进行属性注入
  • 封装类中的变量名要与yaml中数据属性名一一对应

首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解@ConfigurationProperties指定该对象加载yaml中哪一组配置的信息:

@ConfigurationProperties指定要加载的数据的前缀是什么,该前缀下的所有属性就会封装到这个对象中。数据属性名要与对象的变量名一一对应