全局配置文件
- application.properties
- application.yml
配置文件放在src/main/resources目录或类路径/config下。
YAML:以数据为中心。
YAML语法
基本语法
k: v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;
属性和值也是大小写敏感的;
值的写法
字面量:
k: v:字面量直接来写,字符串默认不用加上单引号或者双引号;双引号会转义字符穿中的特殊字符;单引号不会转义特殊字符;
对象、Map(属性和值)(键值对):
值是对象时,直接在下一行缩进写对象的属性和值;或者通过{}使用行内写法,只要在属性间加上“,”即可;例子如下:
friends:
lastName: zhangsan
age: 20
friends: {lastName: zhangsan,age: 20}
数组(List、Set):
用- 值表示数组中的一个元素;或者通过[]使用行内写法;例子如下:
pets:
- cat
- dog
- pig
pets: [cat,dog,pig]
配置文件值注入
1、使用@ConfigurationProperties
@Component
@ConfigurationProperties(prefix = "xxxxxx")
注意必须要声明为组件,导入配置文件处理器,之后编写配置就会有提示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2、使用@Value
@Value("字面量/${key}从环境变量、配置文件中获取值/#{SpEL}")。
与@ConfigurationProperties区别:后者可以批量注入、支持松散绑定、支持JSR303数据校验(@Validated)、支持复杂类型封装,但是后者不支持SpEL。
@PropertySource&@ImportResource
@PropertySource:加载指定的配置文件,@PropertiesSource(value={""})。
@ImportResource:导入Spring配置文件,让里面的内容生效(在主配置类上标注)@ImportResource(locations={""})。
配置文件占位符
${随机数/占位符获取之前配置的值:默认值}
配置文件加载优先级
由高到低:
file:../config/
file:../
classpath:/config/
classpath:/
还可以通过spring.config.location改变默认的配置文件位置(在命令行中:spring.config.location=),同样也是和默认配置文件互补生效,相同配置则处于第一优先级。
外部配置文件加载顺序
打包项目的时候打包src下面的东西,文件根目录和文件config目录下的配置文件并不会被打包。
加载顺序:
命令行:--server.port=xxxx
来自java:comp/env的NDI属性
java系统属性(System.getProperties())
RandomValuePropertySource配置的random.*属性值
优先加载带profile,由jar包外向jar包内:
jar包外部的application-(profile).properties或application.yml(带spring.profile)的配置文件
jar包内的application-(profile).properties或application.yml(带spring.profile)的配置文件
jar包外部的application.properties或application.yml(不带spring.profile)的配置文件
jar包内的application.properties或application.yml(不带spring.profile)的配置文件
其余参考官方文档。