问题导入
什么是yaml,和properties有什么区别?
-
YAML(YAML Ain't Markup Language),一种数据序列化格式
-
优点:
-
容易阅读
-
容易与脚本语言交互
-
以数据为核心,重数据轻格式
-
-
YAML文件扩展名
-
.yml(主流)
-
.yaml
-
2.1 yaml语法规则
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
-
具体来说,当我们说“不允许使用Tab键,只允许使用空格”时,我们指的是在表示层级关系的缩进部分,应该只使用空格键输入空格,而不应该使用Tab键。这是因为不同的系统和编辑器可能会以不同的方式解释和显示Tab键,这可能会导致缩进看起来不一致或者混乱。
例如,有些编辑器可能会将一个Tab键解释为4个空格,而其他编辑器可能只解释为2个空格。这种不一致性可能会导致YAML文件中的层级关系看起来混乱。而使用空格进行缩进则可以确保无论在哪里查看,都能保持一致的层级关系显示。
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
#表示注释
-
核心规则:数据前面要加空格与冒号隔开
2.2 yaml数组数据
-
数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
-
application.yml文件
enterprise: name: lalalala age: 12 subjects: - java - 大数据 - 前端
2.3 yaml数据读取
-
使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
package org.example.controller; import org.example.config.Enterprise; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author Administrator * @ClassName BookController * @Version 1.0 */ @RestController @RequestMapping("/books") public class BookController { @Value("${enterprise.name}") private String name; @Value("${enterprise.age}") private Integer age; @Value("${enterprise.subjects[1]}") private String subjects1; @Autowired private Environment environment; @Autowired private Enterprise enterprise; @RequestMapping("/save") public String save() { //使用@Value注入 System.out.println("name:" + name); System.out.println("age:" + age); System.out.println("subject1:" + subjects1); System.out.println("-----------------------"); //注入environment,调用配置信息 System.out.println("name:" + environment.getProperty("enterprise.name")); System.out.println("age:" + environment.getProperty("enterprise.age")); System.out.println("subjects2:" + environment.getProperty("enterprise.subjects[2]")); System.out.println("------------------------"); System.out.println(enterprise); return "hello,springboot!"; } }
package org.example.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @author Administrator 自定义对象封装指定数据【常用】 */ @Data @Component @ConfigurationProperties(prefix ="enterprise") public class Enterprise { private String name; private Integer age; private String[] subjects; }
启动项目,访问接口,后端 控制台打印
-
name:lalalala age:12 subject1:大数据 ----------------------- name:lalalala age:12 subjects2:前端 ------------------------ Enterprise(name=lalalala, age=12, subjects=[java, 大数据, 前端])