SpringBoot两种配置文件总结

1. 概述

SpringBoot支持properties和yml两种配置方式,两种格式的功能类似,都可以完成项目的配置信息。但是properties的优先级要高于yml,而yml文件采用树状结构,直观上更加一目了然。

2. application.properties

2.1. 新增配置项

在使用Spring Initializr创建项目时,会自动生成一个application.properties文件,在添加配置信息时,每行的格式如下:

属性键=属性值

称之为配置项。例如:

server.port=8080

application.properties文件的配置项可以通过注解@Value注入

2.2. 读取属性值

SpringBoot中支持两种方式读取配置项
SpEL表达式:@Value("#{configProperties[‘key’]}")
例如:

@Value("#{configProperties['server.port']}")
private int port;

占位符:@Value("${key}")
例如:

@Value("${server.port}")
private int port;

2.3. 设置默认属性值

通常情况下,缺少配置项信息会导致程序异常,当配置文件中缺少属性值时,可以在属性键后添加冒号(:)和默认值。
例如:

@Value("${server.port:8080}")
private int port;

2.4. 自定义属性值

根据实际需要可以自定义属性值,配置文件支持多种格式

  • 基本属性类型:字符串、整数、布尔值
server.port=8080
server.register=true
  • 多行字符串
    如果属性值较长,可以将其用反斜杠"/"字符断开,分成几行以提高可读性
app.message=你好\
有什么可以帮助吗
  • 数组、列表或集合
    集合值需要使用逗号(,)隔开,在使用时,只需要将属性注入数组变量即可
app.number=20,30
@Value("${app.number}")
int[] numbers;

列表和集合一样,如果属性的值包含重复项时,则只会将一个元素添加到集合

@Value("${app.number}")
List<Integer> numbers;
  • 列表属性的自定义分隔符
    默认情况下,Spring使用逗号进行分割属性值,如果需要使用其他符合,则可以如下使用
app.number=20;30;40
@Value("#{'${app.number}'.split(';')}")
List<Integer> numbers;
  • HashMap属性
    对于属性为HashMap,可以在配置时设置格式
app.number-map={KEY1:1,KEY2:2,KEY3:3}
@Value("#{${app.number-map}}")
Map<String, Integer> numberMap;
  • 使用环境变量
    在项目中如果需要使用环境变量时
app.java-home=Java path:${JAVA_HOME}
  • 注释
    在配置文件中,如果要进行注释,只需在注释前使用#标识即可
#端口
server.port=8080

3. application.yml

3.1. 简介

yaml语言是一种通用的数据串行化格式,基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 在缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾会被解析器忽略

3.2. yaml支持的数据类型

  1. 对象
    键值对的集合,又被称为映射(Mapping)、哈希(Hashes)、字典,对象的一组键值对用冒号结构表示
app.name: 张三
  1. 数组
    一组按次序排列的值,又称为序列、列表
    例如:
-A
-B
-C

也可以采用行内表示法

car: [audi,bmw]
  1. 复合结构
    对象和数组可以结合使用,形成复合结构
animal:
  -cat
  -pig
car:
  bmw: 720
  audi: A8
  1. 纯量
    最基本的、不可再分的值,支持字符串、布尔值、整数、浮点数、Null、时间、日期
number: 30
isFlag: true

4. 多环境配置

在resources目录下创建多个配置文件,application.yml、application-dev.yml、application-prod.yml。分别在dev和prod配置文件中配置开发和生产环境的配置信息,只需要在application.yml文件中配置如下:

spring:
  profiles:
    active: dev

即可实现不同环境的切换

5. 比较配置文件bootstrap和application

SpringBoot中有bootstrap和application两种配置文件,区别如下:

  1. 加载顺序,bootstrap是应用的父上下文,属于引导配置,由父ApplicationContext加载,优于Application的加载
  2. 属性可否被覆盖。bootstrap中的属性不能被远程或本地相同配置覆盖
  3. bootstrap不支持部分属性。例如server.port
  4. 应用场景不同
    bootstrap主要用于固定、不能被覆盖的属性,以及加解密场景。例如:在使用SpringCloud Config的配置中心时,需要在bootstrap中添加连接到配置中心的配置属性,以加载外部配置中心的配置信息。在使用加解密信息时,配置文件主要用于配置SpringBoot项目的自动化项。
  5. bootstrap和application的上下文共用一个环境,它是所有Spring应用的外部属性的来源。

你可能感兴趣的:(SpringBoot,spring,boot)