您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
yaml基础及其Java应用方案
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
yaml基础及其Java应用方案
自猿其说Tech
2022-01-25
IP归属:未知
27080浏览
计算机编程
### 1 YAML介绍 YAML(YAML Ain't Markup Language),也可以叫做YML,是一种人性化的数据序列化的语言,类似于XML,JSON。SpringBoot的配置文件就支持yaml文件。 基本语法如下: - 大小写敏感 - 使用缩进表示层级关系 - 缩进时不允许使用Tab键,只允许使用空格。 - 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 - 表示注释,从这个字符一直到行尾,都会被解析器忽略。 #### 1.1.Yaml的数据结构 ##### 1.1.1对象 写在一行 ```yaml address: {province: 山东, city: 济南} ``` 写在多行 ```yaml address: province: 山东 city: 济南 ``` ##### 1.1.2 数组:以 - 开头的行表示构成一个数组 写在一行 ```yaml hobbyList: [游泳, 跑步] ``` 写在多行 ```yaml hobbyList: - 游泳 - 跑步 ``` ##### 1.1.3 纯量:是最基本的、不可再分的值 字符串:默认不用加引号,包含空格或特殊字符必须加引号,单引号或双引号都可以 ```yaml userId: S123 username: "李诗诗" password: '123456' province: 山东 city: "济南 : ss" ``` 布尔值:true、false ```yaml success: true ``` 整数 ```yaml age: 13 ``` 浮点数 ```yaml weight: 75.5 ``` Null ```yaml gender: ~ ``` 时间:使用ISO8601标准 ISO8601 ```yaml createDate: 2001-12-14T21:59:43.10+05 ``` ##### 1.1.4 复合结构 复合结构:数组和对象可以构成复合结构。 ```yaml --- userId: "1" username: "lisi" password: "123456" addressList: - province: "河北" city: "邯郸" - province: "北京" city: "北京" hobbyList: - "游泳" - "跑步" birthday: "1989-09-28 17:07:05" validDt: "2021-09-28 17:07:05" ``` #### 1.2 引用 锚点 & 和别名 * ,可以用来引用。 ```yaml student: - &name 小白 - Clark teacher: - *name ``` 转为 JavaScript 代码如下: ```javascript { "student": [ "小白", "Clark" ], "teacher": [ "小白" ] } ``` ### 2 java通过YAMLMapper 实现读写yaml格式信息 ![](//img1.jcloudcs.com/developer.jdcloud.com/be6b3366-37e3-4a74-8df0-c0e1026c1ffc20220125153139.png) YAMLMapper继承自ObjectMapper。与ObjectMapper使用方式类似。 User对象 ![](//img1.jcloudcs.com/developer.jdcloud.com/3a986008-dd18-489e-b07c-00890b49519320220125153152.png) #### 2.1 字符串与对象的互转 ![](//img1.jcloudcs.com/developer.jdcloud.com/bc5a70fd-8ba5-46e9-b9d1-e31b338d575720220125153210.png) 结果: ![](//img1.jcloudcs.com/developer.jdcloud.com/28eb968f-c218-438c-a7ec-f5f2020b2be420220125153222.png) #### 2.2 文件与对象的互转 ![](//img1.jcloudcs.com/developer.jdcloud.com/9e636e40-2de3-4b63-8d84-8cef2c94889120220125153237.png) 结果: ![](//img1.jcloudcs.com/developer.jdcloud.com/83846eaa-36dd-4c40-a5a7-6e13e63575aa20220125153250.png) ### 3 Java使用Beetl模板引擎,生成yaml格式信息 Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。具体信息参考官网: ![](//img1.jcloudcs.com/developer.jdcloud.com/422eaaf8-82a1-4318-8190-49c65c08255b20220125153310.png) Java代码、beetl模板及生成的yaml信息如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/3b843fcf-bad5-45b0-a4ee-ff810672e7af20220125153328.png) ### 4 SpringBoot 解析yaml 当然除了上面介绍的以代码解析yaml的方式外,springboot也提供了方便简洁的形式来解析。这里介绍下注解形式。 #### 示例一: 在resources/yml/目录下新增文件studentinfo.yaml,使用注解@value("${key}")解析 ![](//img1.jcloudcs.com/developer.jdcloud.com/61ec7338-580f-465e-a94a-c38e4cfdcc9020220125153349.png) #### 示例二: 在resources/yml/目录下新增文件studentinfo.yaml,使用注解@ConfigurationProperties(prefix = "studentinfo") == @ConfigurationProperties("studentinfo") ![](//img1.jcloudcs.com/developer.jdcloud.com/b10e52f0-0c80-4064-9b91-b82923872bc320220125153404.png) ### 5 yaml,json,ini这三种格式用来做配置文件优缺点 适合人类编写:ini > toml > yaml > json > xml > plist 可以存储的数据复杂度:xml > yaml > toml ~ json ~ plist > ini 想具体了解的可参考资料: - https://blog.csdn.net/yangyutong0506/article/details/102780228 - https://www.cnblogs.com/pqjwyn/p/13255578.html - https://jingyan.baidu.com/article/1612d5006956d5a30e1eeeab.html ### 6 总结 开发过程中经常遇到需要Java端生成各种Yaml的配置信息(销量预测系统生成算法使用的基础配置信息),这里特意整理了下使用方案,供小伙伴们学习参考。当然json,xml,或者其他常见格式的文件信息,也可以参考这样的思路去学习封装和使用。 青春很短,不负韶华!共勉!! ------------ ###### 自猿其说Tech-京东物流技术发展部 ###### 作者:郭佳良(人工智能与大数据部)
原创文章,需联系作者,授权转载
上一篇:浅谈系统监控指标与平台
下一篇:京东零售开源图深度学习框架Galileo设计理念及异构图推荐模型详解
相关文章
Taro小程序跨端开发入门实战
Flutter For Web实践
配运基础数据缓存瘦身实践
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149964
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号