Yaml 配置文件解析Map-SnakeYAML

java依靠snake yaml生成yaml文件 阅读详情

 

  1. 如何使用SnakeYAML来读取YAML(YML为其简写)配置文件;
  2. 读取后,装载成Map,而Map如何存储的配置文件的数据。

Snake POM引入

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.27</version>
</dependency>

读取YAML配置文件

InputStream in = this.getClass().getClassLoader().getResourceAsStream(DEFAULT_RESOURCES);
Yaml yaml = new Yaml();
Map<String, Object> load = yaml.loadAs(in, Map.class);

Map是如何存储的配置文件数据

以下面的.yml配置文件为例:

log:
  location: /home/iwu/runningstat
  cache:
    path: /home/iwu/runningstat/temp
  local: false
appid: 123
server:
  port: 2020
app:
  testList:
    -
      name: wangchao
      age: 23
    -
      name: sff
      age: 20

使用SnakeYAML进行装载,实例化成Map对象(确切的说,应该是Map的子类,LinkedHashMap)。值得注意的是,要装载如此复杂的配置文件的,必须使用Map的嵌套,即:Map嵌套Map。

先来一段测试代码:

    private void printYmalMap(String prefixKey, Map<String, Object> map) {
        String fullKey = "";
        for (String key : map.keySet()) {
            fullKey = prefixKey == null || "".equals(prefixKey) ? key : prefixKey + "." + key;
            Object value = map.get(key);
            if (value instanceof Map) {
                //System.out.println("there is a map  " + prefixKey + "." + key);
                printYmalMap(fullKey, (Map) value);
            } else if (value instanceof List) {
                System.out.println("there is a list  " + fullKey);
            } else {
                System.out.println("there is a  "+value.getClass().getName() +"...   "+ fullKey);
            }
        }
    }

看看Snake解析上面yml文件打印结果

分析完成,看看完整的yaml加载 代码。这里我们将基本类型转换为了String类型。如有需要我们可以进一步进行处理。

import org.yaml.snakeyaml.Yaml;

import java.io.InputStream;
import java.util.*;

public class YamlResourcesProcessor{
    private static final String DEFAULT_RESOURCES = "application.yml";
    /**
     * ymal 文件中数据解析缓存
     */
    private static volatile Map<String, String> cache = Collections.synchronizedMap(new HashMap<>());

    public YamlResourcesProcessor() {
        load();
    }

    private void load() {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream(DEFAULT_RESOURCES);
        Yaml yaml = new Yaml();
        Map<String, Object> load = yaml.loadAs(in, Map.class);
        printYmalMap(null, load);
        cacheYmal(null, load);
    }

    private void cacheYmal(String prefixKey, Map<String, Object> map) {
        String fullKey = "";
        for (String key : map.keySet()) {
            Object value = map.get(key);
            fullKey = prefixKey == null || "".equals(prefixKey) ? key : prefixKey + "." + key;
            if (value instanceof Map) {
                cacheYmal(fullKey, (Map) value);
            } else if (value instanceof List) {
                // Ymal转Map 暂时不处理List
                cache.put(fullKey,  String.valueOf(value));
                //continue;
            } else {
                cache.put(fullKey,  String.valueOf(value));
            }
        }
    }

    private void printYmalMap(String prefixKey, Map<String, Object> map) {
        String fullKey = "";
        for (String key : map.keySet()) {
            fullKey = prefixKey == null || "".equals(prefixKey) ? key : prefixKey + "." + key;
            Object value = map.get(key);
            if (value instanceof Map) {
                //System.out.println("there is a map  " + prefixKey + "." + key);
                printYmalMap(fullKey, (Map) value);
            } else if (value instanceof List) {
                System.out.println("there is a list  " + fullKey);
            } else {
                System.out.println("there is a  "+value.getClass().getName() +"...   "+ fullKey);
            }
        }
    }

    public Map<String, String> getResources() {
        return cache;
    }
}

 

把yml文件配置转换为Map<String, Object>方式存储开箱即用 记录:385 场景:在Spring Boot微服务中,读取application.yml或者bootstrap.yml等yml文件配置,转换为Map方式存储,使用(key,value)键值对方式,开箱即用。 阅读详情

相关推荐

解决org.yaml.snakeyaml.scanner.ScannerException问题及yml的java.lang.IllegalStateException的问题

问题引入 今天在配置spring boot yml文件时,出现了下面的错误: 根据错误信息来看,mapping values are not allowed here,翻译为此处不允许使用映射值,此处是指哪里?是第25行第13列这个地方,这里不符合yml的编写格式,如图所示: 因而,需要了解yml的配置格式,符合yml的配置格式就行。 yml书写格式链接:https://www.jianshu.com/p/a8252bf2a63d ......

念兮为美 9980

python读取yaml配置文件

支持多种语言:python、js、golang、java、c、c++ YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。 它的基本语法规则如下。 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字...

weixin_30567471的博客 537

使用 ANSYS AEDT(双向耦合)对高功率射频同轴滤波器进行热分析

使用 ANSYS HFSS,可以精确计算 EM 损耗,然后将其导入 ANSYS 热分析并使用 ANSYS Icepak CFD 求解器进行仿真,以帮助工程师解决最复杂的热挑战,并预测其设计在温度变化下的表现。然后,RF 损耗将与 ANSYS Icepak CFD 求解器耦合,以执行热分析,包括传热的传导、对流和辐射模式,并计算温度曲线。在此演示中,我们将仿真下面的 RF 同轴滤波器,并计算由于所用材料的有限电导率和介电损耗而导致的 RF 传导损耗。设置 HFSS 设计后,我们可以开始 HFSS 仿真。

jkh920184196的博客 1050

yaml配置对象map

【代码】yaml配置对象map。

Counter-Strike大牛 2984

别再只调IoU了!给YOLOv8换上NWDLoss,实测小目标检测精度提升明显

本文深入探讨了YOLOv8在小目标检测中的优化策略,重点介绍了NWDLoss(Normalized Wasserstein Distance Loss)的应用优势。通过对比实验证明,NWDLoss能有效解决传统IoU损失函数的局限性,显著提升小目标检测精度,在遥感影像和交通监控等场景中表现尤为突出。文章提供了详细的代码实现和训练技巧,帮助开发者快速集成这一先进技术。

weixin_29072299的博客 267

UE5摄像机抖动全攻略:从Perlin噪点到Sequence实战(附参数调优技巧)

本文深入解析UE5摄像机抖动技术,从Perlin噪点算法到CameraShakeBase蓝图应用,再到Sequence高级控制,提供全面的参数调优技巧。涵盖战斗、爆炸等场景的预设参数,帮助开发者实现专业级抖动效果,提升游戏沉浸感。

weixin_30300225的博客 95

YAML配置文件解析器:SnakeYAML

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33738578的博客 481

读书笔记:深度学习入门-基于python的理论与实现(俗称鱼书)

终于从头到尾把鱼书看完啦,真的是非常入门,非常查漏补缺,对新手很友好,对有一定基础的人也非常不错。看完不复习等于没看,所以今天开始复盘,顺便写这篇读书笔记。希望分享给没看过这本书或者看过这本书的同僚们参考,欢迎大家指教。我将从第三章神经网络开始复习,前两章内容书里已经非常基础and清楚了。(会持续更新滴).........

博客而已 1万+

Java解析yaml文件

Java解析yaml文件1. 什么是yaml ?2. 导入maven依赖3. yaml 案例文件4. 示例代码5. 解析结果 1. 什么是yaml ? 参考下方链接 yaml快速入门 2. 导入maven依赖 <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> &

新生代农民工Steven 1万+

英飞凌TC3xx的GTM模块到底有多强?从PWM生成到电机驱动,一篇讲透车载定时器核心

本文深入解析英飞凌TC3xx系列中的GTM模块在汽车电子领域的强大功能,从PWM生成到电机驱动的全链路设计。通过模块化架构和硬件级解决方案,GTM显著提升系统精度和响应速度,适用于电机控制、电源管理等复杂场景。文章结合实战经验,详细拆解GTM的技术实现和性能优势。

weixin_27741699的博客 204

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

AI人人懂 1296

Springboot YAML文件数据与Map互转

在目前的项目中,yaml文件作为配置文件已是很常见,例如k8s中的 pod、deployment、service等等组件的创建可通过执行yaml文件创建。 废话不多说 先上代码: import com.alibaba.fastjson.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; import org...

qq_38553333的博客 4328

uniapp [全端兼容] - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,Uniapp如何实现天地图的离线加载部署在内网访问(兼容H5、微信小程序、App)

uniapp天地图如何离线访问,无需网络调用天地图API,天地图离线地图,天地图——内网使用离线地图,uniapp中加载天地图的离线地图,uniAPP实现天地图离线访问,在内网中无法直接使用外网天地图资源怎么办,在uni-app中加载地图 -使用天地图的瓦片数据。UNIAPP天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,下载天地图离线服务,并用Uniapp+天地图离线部署,天地图私有化部署,实现离线加载天地图,Java+uniapp天地图离线开发,uniapp项目中无网络

🏆 前端领域优质创作者 4900

Java读取yml配置文件到map中

public class App { public static Map<String, Object> conf = new HashMap<String, Object>(); public static void main(String[] args) throws IOException { URL url = App.class...

xucong996的博客 9970

SAP物料主数据中的销售视图。这是一个在销售与分销模块中至关重要的核心主数据,直接关系到从报价到交货的整个销售流程

SAP物料主数据的销售视图是销售流程的核心基础,它定义了物料如何被销售、定价、开票和交付。销售视图包含五个关键控制点:1)基本销售数据控制物料销售状态;2)销售组织数据决定销售渠道和产品分类;3)通用物料数据管理销售描述和税务分类;4)交货计划控制交付参数;5)开票计划管理定价规则。这些设置直接影响销售流程顺畅度、数据准确性、客户满意度、财务合规性和业务灵活性。建议将销售视图创建纳入新产品引入流程,并建立规范的维护机制,确保业务变化时及时更新配置。

金牌架构师 666

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java解析yaml_YAML配置文件解析器:SnakeYAML

本篇blog主要是讨论:如何使用SnakeYAML来读取YAML(YML为其简写)配置文件;读取后,装载成Map,而Map如何存储的配置文件的数据。SnakeYAML的简介SnakeYAML是针对java语言的YAML解析器。如果想更多的了解SnakeYAML和YMAL,请看blog:如何读取YAML配置文件请看代码:FileInputStream fileInputStream = null;t...

weixin_39907939的博客 1025

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java 读取 yaml 文件

做 java 项目用的最多的配置文件就是 properites 或者 xml, xml 确实是被用烂了,Struts, Spring, Hibernate(ssh) 无一不用到 xml。相比厚重的 xml, properites 要清爽许多,一般的项目自己需要的配置也足够使用。但 properties 只支持 key=value 这种形式的配置,如果再遇到复杂结构的配置,恐怕...

风过留声 1423

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

yaml解析

1、使用spring自带的yaml解析工具: &lt;bean id="yamlMap" class="org.springframework.beans.factory.config.YamlMapFactoryBean"&gt; &lt;property name="resources"&gt; &lt;list&gt; ..

中国华的博客 708

如何在java代码中读取yml配置文件的值示例代码

要在Java代码中读取YAML配置文件的值,您可以使用一些第三方库来解析YAML文件,例如SnakeYAML。 下面是一个示例代码,它展示了如何使用SnakeYAML来读取YAML配置文件的值: import org.yaml.snakeyaml.Yaml; import java.io.FileInputStream; import java.io.FileNotFoundException;...

weixin_42581003的博客 1094

java读取yaml文件内容作为参数

1.首先需要导入yaml所需要的依赖 可以在maven中下载 <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.27</version> </dependency> 2.创建yaml对象并读取其中的内容,并以map形式储存 try{ Yam

jmzzzzz的博客 3334

Java Istio 根据路径读取yaml 变成config

如何实现“Java Istio 根据路径读取yaml 变成config” 整体流程 首先,我们需要根据路径读取yaml文件内容,然后将其转换成config对象。下面是整个过程的步骤表格: 步骤 描述 1 读取yaml文件内容 2 将yaml内容转换成config对象 具体步骤及代码实现 步骤1:读取...

weixin_41557286的博客 138

Spring Boot yml汉字key映射Map配置:格式、绑定原理与排错指南

在Java后端工程中,配置文件承担着业务参数与运行环境解耦的重要职责。Spring Boot基于YAML的属性绑定机制,支持将结构化的键值对映射到强类型配置对象,其中Map类型常被用于存放映射关系。当业务方需要直接使用中文状态作为Map的key时,开发者往往面临IDEA无提示、Map注入为空、Linux启动乱码等一系列配置绑定问题。理解SnakeYAML解析规则与@ConfigurationProperties绑定原理,掌握块格式、内联格式、引号规避特殊字符等工程实践,是解决这类问题的关键。通过属性元数据处

weixin_30984001的博客 66

读取yml内容 / 读取项目结构外的yml内容

yml的读取模板

stznbhh的博客 771

java snakeyaml_SnakeYaml快速入门和使用

在SpringBoot里面我们经常会读取配置文件目前常用的配置文件有两种格式:.properties 和 .yml,它们的区别主要是书写格式不同1).propertiesapp.user.name = javastack2).ymlapp:user:name: javastack另外,.yml 格式不支持 @PropertySource 注解导入配置。今天主要介绍通过第三方工具来读取配置文件Sna...

weixin_29499829的博客 2825

SnakeYaml使用

新的项目中需要将yaml文件解析为对象,调研了决定使用snakeYaml,下面看一看怎么使用。 一、引入依赖 因为项目是使用maven构建的,所以我们在pom文件中引入snakeYaml的依赖,如下: <dependency>   <groupId>org.yaml</groupId>   <artifactId>snakeyam...

weixin_30275415的博客 3396

Java 实现yaml配置文件的读取

常用的配置文件有yaml,xml,properties,json等,今天主要想记录下yaml 文件的读取。废话不多说,直接上代码。 package com.ex.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.net.URL; import java.util.Ma...

子非鱼,安知鱼之乐 4943
上一篇: Shell 脚本学习笔记
下一篇: 什么是浮动IP
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空@脚踏实地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值