配置文件相关笔记

全局配置文件

  • 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)的配置文件

其余参考官方文档。

 

猜你喜欢

转载自blog.csdn.net/Nemoosi/article/details/107749513