一.语法介绍
关于YAML语法,网上有很多入口资料,这里不一一赘述,大家可以参考下面这边博客学习
二.yml和properties的区别
举个例子,请看以下的yaml语法;
environments:
dev:
url: https://dev.example.com
name: Developer Setup
prod:
url: https://another.example.com
name: My Cool App
前面的示例将转换为以下属性:
environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App
列表表示为具有[index]
解除引用的属性键。例如,考虑以下YAML:
my:
servers:
- dev.example.com
- another.example.com
前面的示例将转换为这些属性:
my.servers [0] = dev.example.com
my.servers [1] = another.example.com
总结:
- 在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
- yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
- 在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进特么只能用空格!!!!)
- 每个k的冒号后面一定都要加一个空格;
在SpringBoot中,推荐使用properties或者YAML文件来完成配置,但是对于较复杂的数据结构来说,YAML又远远优于properties。本文接下来主要围绕YAML配置文件来学习SpringBoot项目中配置文件的加载。
三.配置文件加载
首先,我们搭建自己的测试模块,如下图所示
3.1application.yml
根据上面学习的YAML语法,我们创建如下的配置文件信息,接下来我们要测试Spring Boot的两种配置文件加载方式;
# 开发环境配置
server:
port: 8081
servlet:
# 项目contextPath
context-path: /miloyaml
#测试@ConfigurationProperties注解注入属性
milo-attributes:
value: 345 #对应单个值
valueArray: 1,2,3,4,5,6,7,8,9 #对应数组
valueList: #对应list
-13579
-246810
valueMap: #对应map
name: lili
age: 20
sex: female
valueMapList: #对应list<map>
- name: bob
age: 21
- name: caven
age: 31
#测试@Value注解注入属性
value: "milo"
list: topic1,topic2,topic3
maps: "{key1: 'value1', key2: 'value2'}"
3.2@ConfigurationProperties
首先,我们需要在pom文件中引入如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
接下来,我们创建配置类YamlConfig
,它的作用是接受配置文件中的配置信息;项目启动之后,会将配置文件中前缀为milo-attributes
的配置信息自动填充到对应的字段;
@Component
@Getter
@Setter
@ConfigurationProperties(prefix = "milo-attributes")
@ToString
public class YamlConfig {
private String value;
private String[] valueArray;
private List<String> valueList;
private HashMap<String, String> valueMap;
private List<Map<String, String>> valueMapList;
}
最后,我们创建测试类YamlController
@Controller
@RequestMapping("/yaml")
public class YamlController {
@Autowired
private YamlConfig yamlConfig;
@Autowired
private ValueConfig valueConfig;
@RequestMapping("/index1")
@ResponseBody
public String index1(){
return yamlConfig.toString();
}
}
我们一起来看看测试结果:
访问地址:http://localhost:8081/miloyaml/yaml/index1
从上图中我们看到,配置文件中的信息自动填充到YamlConfig
类的对应字段中,然后响应到浏览器;
3.3@Value
现在,我们来将刚才的代码做一些修改,来测试@Value是如何加载配置文件中的信息;
首先我们创建配置类ValueConfig
@Component
@Getter
@Setter
@ToString
public class ValueConfig {
@Value("${value}")
private String value;
@Value("#{'${list}'.split(',')}")
private List<String> list;
@Value("#{${maps}}")
private Map<String,String> maps;
}
接下来,我们在YamlController
中新增方法用于测试@Value
@Controller
@RequestMapping("/yaml")
public class YamlController {
@Autowired
private YamlConfig yamlConfig;
@Autowired
private ValueConfig valueConfig;
@RequestMapping("/index1")
@ResponseBody
public String index1(){
return yamlConfig.toString();
}
@RequestMapping("/index2")
@ResponseBody
public String index2(){
return valueConfig.toString();
}
}
我们一起来看看测试结果:
访问地址:<http://localhost:8081/miloyaml/yaml/index2
从上图中我们看到,配置文件中的信息自动填充到ValueConfig
类的对应字段中,然后响应到浏览器;
3.4@ConfigurationProperties和@Value的比较
四.总结
本篇文章我们主要学习了SpringBoot框架yml配置文件的加载方式,至于更多的配置,还需要大家去探索学习,谢谢大家;
示例代码
关于本篇文章的代码大家可参加项目中的milogenius-yaml模块
返回专栏目录 |
---|