当前位置: 首页 > 后端技术 > Java

面试官:什么是YAML?它与SpringBoot有什么关系?

时间:2023-04-01 21:27:59 Java

1。什么是YAMLYAML是“YAMLAin'taMarkupLanguage”(YAML不是标记语言)的递归缩写。YAML实际上的意思是:“YetAnotherMarkupLanguage”(仍然是一种标记语言)。这种声音的主要优势是以数据为中心,而不是以标记语言为重点,比如xml语言会大量使用标记。YAML是一种可读性强、易于理解的数据序列化表达格式。它的语法与其他高级语言相似,可以很方便地表达列表(数组)、哈希表、标量等数据形式。它使用空白符号进行缩进和大量依赖于外观的特征,特别适用于表达或编辑数据结构、各种配置文件等。YAML配置文件的后缀为.yml,如配置文件applicationSpringboot项目中使用的.yml。我不会介绍SpringBoot的基础知识。推荐这个实用教程:https://github.com/javastacks...2.YAML的基本语法使用可打印的Unicode字符,可以使用UTF-8或UTF-16。数据结构为键值对形式,即键名:值,注意冒号后必须有空格。每个列表(数组)成员都在一行中表示,前面有破折号+空格(-)。或者使用方括号([])并用逗号+空格(,)分隔成员。哈希表的每个成员在键值和内容之间用冒号+空格(:)隔开。或者使用花括号({})并用逗号+空格(,)分隔它们。引号一般不用于字符串值,但必要时可以使用。当使用双引号表示字符串时,字符串中的特殊字符(如\n)将被转义。使用单引号时不会转义字符串中的特殊字符。区分大小写使用缩进来表示层次关系。缩进不允许使用制表符,只允许使用空格,因为制表符的长度在不同的系统下可能会有所不同。缩进的空格数可以是任意的,只要同一级别的元素左对齐即可。在单个文件中,可以使用三个连续的连字符(—)来区分多个文件。还有一个可选的三个点(...)序列来指示文件的结尾。'#'表示注释,可以出现在一行中的任何位置。单行注释中使用逗号和冒号时,必须跟一个空白字符,这样可以在字符串或值中自由添加分隔符(例如:5,280或http://www.wikipedia.org),无需引号.3.数据类型标量(scalars):单一的、不可分割的值对象:键值对的集合,也称为映射(mapping)/散列(hashes)/字典(dictionary)数组:一组按顺序排列的值,也称为序列(sequence)/列表(list)标量标量是最基本的数据类型,不可分割的值,它们一般用来表示单个变量,有以下七种:stringbooleanintegerFloatingpointnumberNulltimedate#Stringstring.value:你好!我是陈皮!#布尔值,trueorfalseboolean.value:trueboolean.value1:false#integerint.value:10int.value1:0b1010_0111_0100_1010_1110#Binary#floatingpointnumberfloat.value:3.14159float.value1:314159e-5#科学记数法#null,~代表nullnull.value:~#时间,时间采用ISO8601格式,时间和日期之间使用T连接,最后用+表示时区datetime。value:!!timestamp2021-04-13T10:31:00+08:00#date,日期必须使用ISO8601格式,即yyyy-MM-dddate.value:!!timestamp2021-04-13中这样,我们就可以在程序中引入,如下:@RestController@RequestMapping("demo")publicclassPropConfig{@Value("${string.value}")privateStringstringValue;@Value("${boolean.value}")privatebooleanbooleanValue;@Value("${boolean.value1}")privatebooleanbooleanValue1;@Value("${int.value}")privateintintValue;@Value("${int.value1}")privateintintValue1;@Value("${float.value}")privatefloatfloatValue;@Value("${float.value1}")privatefloatfloatValue1;@Value("${null.value}")privateStringnullValue;@Value("${datetime.value}")privateDatedatetimeValue;@Value("${date.value}")privateDatedatevalue;}SpringBoot基础就不介绍了,推荐这个实用教程:https://github.com/javastacks...Object我们知道单个变量可以使用键值对,使用冒号结构来表示key:value,注意冒号后面必须加一个空格来表示缩进键值对的对象,如如下所示:person:name:tangerinepeelage:18man:true然后把这些属性赋值给程序中的Person对象,注意Person类一定要加get/set方法,否则属性获取不到配置文件的值正确,使用@ConfigurationProperties注入对象,@value不能很好的解析复杂的对象。@Configuration@ConfigurationProperties(prefix="my.person")@Getter@SetterpublicclassPerson{私有字符串名称;私人年龄;privatebooleanman;}当然也可以使用key:{key1:value1,key2:value2,..}的形式如下:person:{name:陈皮,age:18,man:true}的数组可以用一个短横线加一个空格-行首组成数组的每个元素,地址字段如下:人:姓名:陈皮年龄:18人:真实地址:-深圳-北京-广州你也可以使用方括号进行内嵌显示,如下:人:姓名:陈皮年龄:18人:真实地址:代码中的[深圳,北京,广州]引入方法如下:@Configuration@ConfigurationProperties(prefix="person")@Getter@Setter@ToStringpublicclassPerson{私有字符串名称;私人年龄;私人布尔人;privateListaddress;}如果数组字段的成员也是一个数组可以嵌套,如下:person:name:陈皮age:18man:trueaddress:[深圳、北京、广州]twoArr:--2-3-1--10-12-30@Configuration@ConfigurationProperties(prefix="person")@Getter@Setter@ToStringpublicclassPerson{privateStringname;私人年龄;privatebooleanman;javaprivateList地址;privateList>twoArr;}如果数组成员是对象,使用以下两种形式:children:-name:小红age:10-name:Xiaowangage:15childs:[{name:Xiaohong,age:10},{name:Xiaowang,age:15}]4.文本块如果要引入多行文本块,可以使用|符号,注意冒号:和|之间必须有一个空格符号人:姓名:|你好爪哇!我没事!谢谢!再见!它与添加双引号的效果相同,可以转义特殊字符:person:name:"HelloJava!!\nIamfine!\nThanks!GoodBye!"5、显示指定类型有时我们需要显示指定值的类型,可以使用!(感叹号)明确指定类型。!单感叹号一般为自定义类型,!!双感叹号为内置类型,例如:#指定为字符串string.value:!!strHelloWorld!#!!timestamp指定为日期时间类型datetime.value:!!timestamp2021-04-13T02:31:00+08:00内置类型如下:!!int:整型!!float:浮点型!!bool:Boolean类型!!str:字符串类型!!binary:二进制类型!!timestamp:日期时间类型!!null:空值!!set:集合类型!!omap,!!pairs:key-valuelistorobjectlist!!seq:sequence!!map:hashtabletype6,参考参考会用于&锚点和星号,&用于建立锚点,<<表示合并到当前数据中,用于引用锚点。xiaohong:&xiaohongname:Xiaohongage:20dept:id:D15D8E4F6D68A4E88E<<:*xiaohong上面最后等同于:xiaohong:name:Xiaohongage:20dept:id:D15D8E4F6D68A4E88Ename:Xiaohongage:20还有一个文件参考,引用定义的变量,如下:base.host:https://chenpi.comadd.person.url:${base.host}/person/add7,单文件多配置可以在同一个文件中实现多个文档分区,即多个配置。一个yml文件中,多个不同的配置用-隔开,根据spring.profiles.active的值决定启用哪个配置#常用配置spring:profiles:active:pro#指定使用哪个文档块#开发环境configurationspring:profiles:dev#profiles属性代表配置的名称server:port:8080#生产环境配置spring:profiles:proserver:port:8081来源:blog.csdn.net/chenlixiao007推荐近期文章:1.1000+Java面试题及答案排序(2021最新版)2.别再满屏if/else了,试试攻略模式,太爽了!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.6正式发布,一大波新特性。.5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!