前言
SpringBoot的配置文件除了支持application.properties文件格式还支持application.yaml格式的配置文件。
YAML (YAML Aint Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,比json、xml和等更适合做配置文件。
Yaml语法结构
Yaml基本语法如下:
1、使用缩进表示层级关系
2、大小写敏感
3、缩进不允许使用tab,只允许空格
4、缩进的空格数不重要,只要相同层级的元素左对齐即可
5、字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义
6、key: value;kv之间有空格
Yaml数据结构
Yaml文件支持三种数据结构:
1、字面量:普通的值(数字,字符串,布尔)
key: value:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "李青 \n 亚索":输出:李青 亚索
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘李青 \n 亚索’:输出:李青 \n 亚索
2、对象:key-value键值对的集合
key: value:在下一行来写对象的属性和值的关系,需要进行缩进
对象还是key: value的方式
friends: lastName: zhangsan age: 20 复制代码
行内写法:
friends: {lastName: zhangsan,age: 18} 复制代码
3、数组:一组按次序排列的值(List、Set):
使用- 值表示数组中的一个元素
pets: - cat - dog - pig 复制代码
数组行内写法:
pets: [cat,dog,pig] 复制代码
示例
1、在SpringBoot项目中声明一个person实体类和Phone实体类:
@Data @ToString @Component //读取配置文件中以person开头的配置 @ConfigurationProperties(prefix = "person") public class Person { private String userName; private Boolean boss; private Date birth; private Integer age; private Phone phone; private String[] interests; private List<String> animal; private Map<String, Object> score; private Set<Double> salarys; private Map<String, List<Phone>> allPhones; } 复制代码
@Data /*自动添加getter、setter方法,需要引入lombok依赖*/ @ToString public class Phone { private String band; private Double price; } 复制代码
2、在pom文件中引入spring-boot-configuration-processor依赖,这样自定义的类和配置文件就可以和默认配置一样可以绑定提示。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> 复制代码
3、上述依赖只是为了方便开发,适用于开发环境,所以可以在打包的时候不将其进行打包,在pom文件build节点加入下面配置,不加也可以,没有影响,只是会影响打包的大小和速度:
<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> 复制代码
4、然后在application.yml文件中写入Person的yaml格式的配置:
person: # 单引号会将\n作为字符串输出,双引号会将\n换行输出:所以双引号不会进行转义,而单引号会转义,因为\n本来就是转义换行的意思 # -n表示N大写,等同于userName user-name: 张三 boss: true # 默认时间格式是/ birth: 2020/12/29 age: 18 phone: band: 华为 price: 6000.00 # interests: [篮球,足球]等同于下面格式 # -代表一个元素 interests: - 篮球 - 足球 - 18 - 175158455 animal: [猫,狗] # score: {english:80,math:90} score: english: 80 math: 90 salarys: - 9999.98 - 9999.99 allPhones: china: - {band: 华为,price: 6000.00} - band: 小米 price: 5000.98 - band: oppo price: 4000.36 America: [{band: Iphone,price: 7000.23},{band: nokia,price: 4002.36}] 复制代码
5、写一个controller类进行测试:
@RestController public class YamlController { @Autowired private Person person; @RequestMapping("/person") public Person returnPerson(){ return person; } } 复制代码
启动程序,浏览器地址栏输入:http://localhost:8081/share/person,输出以下结果:
总结
以上就是yaml简单的学习,yaml格式文件在开发中使用比较广泛,它比properties文件更加直观,清楚,尤其非常适合用来做以数据为中心的配置文件。在springboot的配置中如果application.properties文件和application.yml文件同时存在,那么都会生效,如果两个文件中对同一配置进行设置,则会以properties文件为准。application.yml也可以写成application.yaml。
如有任何问题或者不对的地方欢迎一起交流讨论学习!