YAML简介
Spring Boot 可以使用 application.properties 文件或者 application.yml 文件,文件名是固定的。yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json/xml等更适合做配置文件,官方也更推荐使用yml文件作为配置文件。
比如配置端口号:
server:
port: 8081
注意下 port 前面不允许使用 tab,否则报错,port 后面的:
后面也是需要一个空格
YAML 适应场景
- 脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用
- 序列化: YAML是由宿主语言数据类型直转,的比较适合做序列化。
- 配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。
YAML 语法
- 使用空格缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)
- ‘#’ 表示注释,只能单行注释
- 减号后面后面也需要一个空格,表示列表(数组或者 list )
- 用冒号和空格表示键值对 key: value
- 简单数据可以不使用引号括起来,包括字符串数据。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中可以使用某些转义字符
测试
设置元数据以及自动的注入需要引入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
首先写一个测试实体类
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private int userId;
private String userName;
private List<String> books;
private String[] mobile;
private Map<String,String> other;
//省略set/get方法
}
然后在application.yml文件添加如下内容:
user:
userId: 1001
userName: admin
books:
- 三国演义
- 红楼梦
- 西游记
mobile:
- 华为
- 小米
- 苹果
other:
height: 170cm
weight: 120
@ConfigurationProperties(prefix = "user")
该注解声明了配置文件的前缀user
controller 层使用@Autowired
注入 bean 即可:
@RestController
public class UserController {
@Autowired
User user;
//查询数据,并且返回给页面显示
@RequestMapping("/index")
public String index(Model model){
System.out.println("--------yml文件数据读取--------");
System.out.println(user.getUserId());
System.out.println(user.getUserName());
System.out.println(user.getBooks());
System.out.println(Arrays.toString(user.getMobile()));
System.out.println(user.getOther());
return "index";
}
}
测试结果如下: