提前预知
- 课程笔记来源于雷神的SpringBoot2教程
- 参考文档地址:参考文档
- SpingBoot支持的配置文件有很多种,原生的配置文件使用比较麻烦,一般使用
properties
结尾的配置文件,或者是yaml
配置文件,下面主要介绍yaml配置文件的使用语法,如果你使用properties类型的配置文件,就不必往下看了。
01、文件类型
- yaml类型的配置文件
1.1、基本语法
k:(空格)v
表示一对键值对(空格必须有)
-
如果有层级关系,以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的
-
区分大小写
-
例如:
server:
port: 8088
path: /hello
1.2、数据类型
- 字面量:单个的、不可再分的值。date、boolean、string、number、null。
字符串
默认不用加上单引号或者双引号
,也可以加,但是单引号和双引号的功能有点区别
双引号:会转义特殊字符
单引号;不会转义字符串里面的特殊字符,特殊字符最终只是一个普通的字符串数据
- 对象:键值对的集合。map、hash、set、object
- 数组:一组按次序排列的值。array、list、queue
- 例如:
字面量:
k: v
对象:
行内写法:
k: {k1:v1,k2:v2,k3:v3}
行间写法
k:
k1: v1
k2: v2
k3: v3
数组:
行内写法:
k: [v1,v2,v3]
行间写法:
k:
- v1
- v2
- v3
2、配置提示
- 自定义的类和配置文件绑定一般没有提示,在POM文件添加下面的依赖,会有自动提示功能:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
3、配置文件占位符
- 这个配置文件占位符的设置在
properties配置文件
中和yml配置文件
中都可以使用 - 占位符的格式为:
${占位符}
例如:person.last-name=小仙女${random.int[10,20]}
- 随机数占位符
${random.value}
${random.int}:使用一个随机的整数来作为替代值
${random.long}:使用一个随机的长整数来作为替代值
${random.int(10)}:使用0-10之间的随机整数来作为替代值
${random.int[10,20]}:使用10-20之间的整数来最为替代值
- 占位符获取之前配置的值,
如果没有可以是用:指定默认值
//假设person.hello=jinmao
//获取person.hello的值:jinmao_dog
//获取不到使用默认的hello:hello_dog
person.dog.name=${person.hello:hello}_dog
4、配置文件中的Profile(难点)
-
Profile:是Spring对不同环境提供不同配置功能的支持,可以通过激活指定参数等方式快速切换环境
-
1,多Profile模式:使用多个配置文件,默认使用application.properties配置文件
- 格式:
application-{profile}.properties/yml
- 例如:
application-dev.properties:开发环境
application-prod.properties:生产环境
- 格式:
-
2,多Profile模式(yml支持多文档块方式):使用文档块,文档块之间使用
---
隔开
注意:
properties类型的配置文件不支持文档块模式
,配置文件的优先级是perproties类型大于yml类型.
如果使用 properties类型配置文件可以使用多个properties配置文件,在启动项目的时候指定响应的配置文件即可。
我们可以在默认环境的
profiles属性
中设置active属性
用来激活不同的环境,如果这个值为空
,就激活默认环境
,不为空激活对应环境
除了在配置文件里面使用active激活响应的环境之外,我们还有两种激活环境的方式:
1.启动项目的时候设置虚拟机参数:-D:spring.profiles.active=环境名称
2.将项目打成jar包,启动的时候设置参数:java -jar 文件名.jar --spring.profiles.active=环境名称
- 举例:
# 默认环境
spring:
profiles:
active:
server:
port: 8081
---
# 开发环境
spring:
profiles: dev
server:
port: 8081
---
# 测试环境
spring:
profiles: test
server:
port: 8082
5、配置文件加载位置
- springboot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的
默认配置文件
项目根目录:./config/
项目根目录:./
classpath:/config/
classpath:/
- 优先级由高到底,高优先级的配置会覆盖低优先级的配置
SpringBoot会从这四个位置全部加载主配置文件,互补配置
- 我们还可以通过spring.config.location来改变默认的配置文件位置(
项目打包好之后使用此命令
)- 启动打包好的项目的时候来指定配置文件的新位置,
java -jar 文件名.jar --spring.config.location=G:/application.properties
, - 指定配置文件和默认加载的这些配置文件共同起作用形成互补配置
- 启动打包好的项目的时候来指定配置文件的新位置,
6、对比分析
@Value
获取值和@ConfigurationProperties
获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
-
配置文件:
@ConfigurationProperties
和@value
注解的选择- 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的
某项值
,使用@Value
- 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用
@ConfigurationProperties
- 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的
-
@PropertySource
注解:@PropertySource
注解:加载指定的配置文件- 这个注解作用在Bean类上,这个Bean会加载指定的配置文件
-
@ImportResource
注解(不推荐
):-
@ImportResource
注解:给springboot容器中添加组件
,导入Spring的配置文件,让配置文件里面的内容生效 -
注意:Spring Boot里面
没有
Spring的配置文件,我们自己编写的配置文件,也不能自动识别,想让我们自己配置的Spring的配置文件生效可以使用@ImportResource
注解,将这个注解标注在一个配置类上即可 -
在resource文件夹下编写一个spring配置文件:
beans.xml
-
分析:
- 其实就是先把要添加的组件(
bean
)配置到spring的配置文件中(XML配置文件
),然后通过在配置类
上添加@ImportResource注解将XML配置文件中的bean添加到springboot的容器中。 - 对比下面的
@Bean
注解会发现,上面的注解需要多写一个XML配置文件
- 其实就是先把要添加的组件(
-