1 基本介绍
(1)YAML是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties。
(2)在创建一个 SpringBoot 项目时,引入的 spring-boot-starter-web 依赖间接地引入了 snakeyaml 依赖, snakeyaml 会实现对 YAML 配置的解析。
(3)YAML 的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。
1.1 YAML 配置与properties配置的比较
- 可以使用 @PropertySource 注解加载自定义的 Properties 配置文件,但无法加载自定义的 YAML 文件。
- YAML 支持列表的配置,而 Properties 不支持。
1.2 常规配置
- 在 Spring Boot 项目中使用 YAML 只需要在 resources 目录下创建一个 application .yml 文件即可,这里我们添加如下配置:
server:
port: 8081
servlet:
context-path: /hangge
tomcat:
uri-encoding: utf-8
- 配置属性之间也可以相互引用使用:
my:
name: 航歌
age: 100
info: name:${my.name} age:${my.age}
- 配置文件中可以使用 ${random} 来生成各种不同类型的随机值:
my:
secret: ${random.value}
number: ${random.int}
bignumber: ${random.long}
uuid: ${random.uuid}
lessthanten: ${random.int(10)}
numberinrange: ${random.int[1024,65536]}
1.3 将数据注入到属性上
- 假设我们有如下配置数据:
my:
name: 航歌
age: 100
- 在需要的地方我们使用 @Value 注解就可以将数据注入到属性上:
@RestController
public class HelloController {
``@Value``(``"${my.name}"``)
``String name;
``@GetMapping``(``"/hello"``)
``public String hello() {
``return "welcome to " + name;
``}
}
1.4 将数据注入到Bean中
有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的 bean。
(1)首先我们创建一个名为 My 的 Bean,并将前面的配置数据注入到这个 Bean 中。
- @ConfigurationProperties 中的 prefix 属性描述了要加载的配置文件的前缀。
- Spring Boot 采用了一种宽松的规则来进行属性绑定: 假设 Bean 中的属性名为 authorName,那么配置文件中的属性可以是 my.author_name、my.author-name、my.authorName 或者 my.AUTHORNAME
@Component
@ConfigurationProperties``(prefix = ``"my"``)
public class My {
``private String name;
``private String age;
``public String getName() {
``return name;
``}
``public void setName(String name) {
``this``.name = name;
``}
``public String getAge() {
``return age;
``}
``public void setAge(String age) {
``this``.age = age;
``}
}
(2)然后我们在 Controller 中引入这个 Bean 使用即可:
@RestController
public class HelloController {
``@Autowired
``My my;
``@GetMapping``(``"/hello"``)
``public String hello() {
``return my.getName() + ``" : " + my.getAge();
``}
}