SpringBoot 中的几类配置文件详解
2021-12-25 19:43:26 1.6k 字 · 约 6 分钟 # SpringBoot

properties

对于传统的一个很大的优点就在于比较方便的配置文件,在这里总结一下。

中可以有种配置文件。

最常见的就是文件,也是书写常见的键值对形式,也是我一直以来都比较喜欢的一种配置文件形式,当时觉得的格式太丑了,而且可能缩进看上去不太舒服。

中书写形式的配置形式,配置也一般以前缀形式出现,如果不太记得,也可以去官网查看,比如服务器的配置一般以开头,日志配置以开头等。

同时,也配置了大量默认值,很多值也在引入的中配置好了。

另外,提供了另外的两种格式,格式。

如果中三种配置文件都配置了,优先级而言,不同配置文件中相同配置按照优先级相互覆盖,不同文件的不同配置则全部保留。

yaml

是一种新的数据序列化形式,有许多优点,容易阅读,并且容易和脚本语言交互,以数据为中心,重数据轻格式。有两种拓展名,都是正确的拓展名,但是一般来说前者更加主流。

规则:

  • 大小写敏感;
  • 属性的层级关系使用多行来描述,每行结尾使用冒号结束;
  • 使用缩进代表层级关系,同层次左侧对齐,只允许使用空格,不能使用
  • 属性值前面要有一个空格,名和值之间使用冒号+空格进行分割;
  • #代表注释;

核心规则:数据前面要有空格

字面值表示方式:

1
2
3
4
5
6
7
8
boolean: TRUE                        #TRUE,true,True,False,false,FALSE均可
float: 3.14 #6.8523015e+5支持科学计数法
int: 123 #0b1010_0110_1010_1110 支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "HelloWorld" #可以用双引号包裹特殊字符
date: 2021-12-25 #日期必须用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #日期与时间之间使用T连接,最后用+代表时区

数组表示形式:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
data:
- 1
- 2
- 3
subject:
- Java
- 前端
- 运维
- 测试
enterprise:
name: zhangsan
age: 20
subject:
- Java
- 计组
- 计网

likes: [吃饭,睡觉,打豆豆] #数组简略形式

对象数据格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
users
- name: Tom
age: 4
- name: Jack
age: 5
- name: zhangsan
age: 6
users1:
-
name: Tom
age: 33
-
name: Jack
age: 44
users2: [ {name:zhangsan, age:4}, {name:lisi, age:5}] #对象数组简略形式

boot中读配置

单一数据

使用注解和表达式读取配置的值如即可读取到默认配置文件中名为的配置信息。

表示层级关系时,使用即可,如即可读取到这个配置的值。

读取数组中的某一项时,即可读取到数组中的第项。

变量引用

中可以设置变量的形式来减少同一前缀的配置项书写。

如:

1
2
baseDir: C:\Windows
tempDir: ${baseDir}\temp

这样就可以引用定义的,更加方便的修改了。

1
2
3
4
5
mrbird
blog
name: mrbird's blog
title: Spring Boot
wholeTitle: ${mrbird.blog.name}--${mrbird.blog.title}

全部数据

读取配置文件中的全部配置信息,提供了对象进行配置信息的封装,这其中封装了配置文件中的全部信息。

可以使用方法获取配置的值。

对象数据

对于一个完整的配置项来说,配置的表达式可能会很长,不方便记忆,所以可以使用配置的对象形式来加载配置信息。通常使用来加载。

可以预先定义好对象用于封装配置文件中的数据,由来加载数据到对象中。

创建的类要有方法,且属性名要对应上,且类要加入容器来管理,在配置类上加入注解使其注入到容器中,或是在需要用到这个封装类的地方使用来注入配置信息,该注解用于开启对的支持。

@EnableConfigurationProperties 文档中解释:
@EnableConfigurationProperties注解应用到你的@Configuration时, 任何被@ConfigurationProperties注解的beans将自动被Environment属性配置。 这种风格的配置特别适合与SpringApplication的外部YAML配置进行配合使用。

在类上方配置指定加载的数据,注解中值为配置的前缀

如下所示:

1
2
3
4
5
6
7
8
9
@Data
@ConfiguraionProperties(prefix = "datasource")
@Component
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
}

更换配置来源

中通常默认配置信息是从中读取,但是对于有些信息,也可以配置在其他文件中,使用的方式执行配置来源后,再配置来指定前缀读取配置信息。

常用注解

用于向容器中导入自定义配置信息,一般用于导入的属性配置文件,无法解析文件。

也用于向容器中导入以及配置信息,一般用于导入的属性配置文件。在中用得比较少,已经被配置类所取代,如果要在中使用,要放在配置启动类上。

用来标注该类是作为定义的源,相当于配置标签。此外该注解标注的类允许通过调用同一类的其他标注的方法表示之间的依赖关系。

标注在方法上,用于指示方法的返回值的实例化、配置和初始化都由IOC容器来管理。

比较通俗的解释是标注的类等同于一个文件,而标注的方法等同于一个标签。

将配置文件中以指定前缀的配置进行导入并绑定,作用与类似,但是更加方便。

使得配置了的配置类生效,即引入该配置类,这样前者的配置类可以不用交由IOC容器来管理。