yaml详解实战,读取实战,以及运行结果解析,以及单引号和双引号对转义符读取的影响

news2024/11/13 22:40:41

在这里插入图片描述

一、 YAML:数据格式

文章:《yaml基本语法,数据类型,对象,数组,复合结构,纯量,引用;文件后缀为.yml或.yaml》
里有一些介绍,以及我自己的理解。
这篇文章偏实战些

对象(map):键值对的集合

person:
  name: zhangsan
# 行内写法
person: {name: zhangsan}

数组:一组按次序排列的值

address:
 - beijing
 - shanghai
# 行内写法
address: [beijing,shanghai]

纯量:单个,不可再分割的值

msg1: 'hello \n world' #单引号忽略转义字符
msg1: "hello \n world" #双引号识别转义字符

二、3 种读取方式

2.1 @Value()读取方式

    @Value("${name}") //${name}里的name要和.yml文件里的name对应
    private String name;

2.2 Environment 读取方式

@Autowired
    private Environment env; //和Value获取比较只需要注入一次,就可以获取所以数据

2.3 ConfigurationProperties 读取方式

    @Autowired
    private personModel person;
@Component
//添加Component表示的意思 personModel被spring所识别,它是一个bin
//@ConfigurationProperties  //不指定节点对象则是全部,它会根据类里面的属性名称去寻找配置文件的名称逐一对应
@ConfigurationProperties(prefix = "person")
//这里指定了名称,它会根据指定的名称去寻找配置文件里的对象节点名称进行对应,
//注意:这里的名称一定要和配置文件里的对象名称一致
public class personModel {}
  • 具体请看下文的 personModel.java 文件内容

三、完整实例配置文件以及运行结果

我的项目结构如下图

在这里插入图片描述

application.yml 文件内容


server:
  port: 8081

name: abc

#对象
person:
  name: zhangsan
  age: 20
  address:
    - beijing
    - shanghai

#对象行内写法
person2: {name: zhangsan,age: 20}

#数组
address:
  - beijing
  - shanghai

#数组行内写法
address2: [beijing,shanghai]

#纯量
msg1: 'hello \n world' #单引号忽略转义字符
msg2: "hello \n world" #双引号识别转义字符

#参数引用
nameval: xiaoming
personval:
  name: ${nameval} #引用上边定义的nameval值


personModel.java 文件内容

package jjycheng.springbootwebdemo.springbootwebdemo.demos.web;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
//添加Component表示的意思 personModel被spring所识别,它是一个bin
//@ConfigurationProperties  //不指定节点对象则是全部,它会根据类里面的属性名称去寻找配置文件的名称逐一对应
@ConfigurationProperties(prefix = "person")
//这里指定了名称,它会根据指定的名称去寻找配置文件里的对象节点名称进行对应,
//注意:这里的名称一定要和配置文件里的对象名称一致
public class personModel {
    private  String name;
    private  int age;
    private  String[] address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String[] getAddress() {
        return address;
    }

    public void setAddress(String[] address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "personModel{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}

YamlTestController.java 文件内容

package jjycheng.springbootwebdemo.springbootwebdemo.demos.web;

import com.sun.org.apache.xpath.internal.objects.XString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@RequestMapping("/yml")
@Controller
public class YamlTestController {

    /*---------------【Value注解方式】--------------------*/
    @Value("${name}") //${name}里的name要和.yml文件里的name对应
    private String name;

    @Value("${person.name}")
    private String personName;

    // 参数引用
    @Value("${personval.name}")
    private String personvalName;

    // 数组
    @Value("${address[0]}")
    private String address0;

    // 纯量
    @Value("${msg1}")
    private String msg1;
    @Value("${msg2}")
    private String msg2;

    /*---------------【对象注入】--------------------*/
    @Autowired
    private Environment env; //和Value获取比较只需要注入一次,就可以获取所以数据

    /*---------------【ConfigurationProperties对象和配置属性的绑定】--------------------*/
    @Autowired
    private personModel person;

    @RequestMapping("/get")
    @ResponseBody
    public String get() {
        //控制台输出
        System.out.println("-------【Value引入】----------");
        System.out.println("name="+name);
        System.out.println("personName="+personName);
        System.out.println("personvalName="+personvalName);
        System.out.println("address0="+address0);
        System.out.println("msg1="+msg1);
        System.out.println("msg2="+msg2);
        System.out.println("-------【对象引入】----------");
        System.out.println("env_name="+env.getProperty("name"));
        System.out.println("env_personName="+env.getProperty("person.name"));
        System.out.println("env_personvalName="+env.getProperty("personval.name"));
        System.out.println("env_address0="+env.getProperty("address[0]"));
        System.out.println("env_msg1="+env.getProperty("msg1"));
        System.out.println("env_msg2="+env.getProperty("msg2"));
        System.out.println("-------【ConfigurationProperties】----------");
        System.out.println("person.name="+person);
        for (String item: person.getAddress())
        {
            System.out.println("person.Addressitem="+item);
        }
        //结果输出(页面输出)
        String res= "<br/><h1 style=\"color:red;\">-------【Value引入】----------</h1>"+
                "<br/><b>name="+name+"</b>"+
                "<br/><b>personName="+personName+"</b>"+
                "<br/><b>personvalName="+personvalName+"</b>"+
                "<br/><b>address0="+address0+"</b>"+
                "<br/><b>msg1="+msg1+"</b>"+
                "<br/><b>msg2="+msg2+"</b>"+
                "<br/><h1 style=\"color:red;\">-------【对象引入】----------</h1>"+
                "<br/><b>env_name="+env.getProperty("name")+"</b>"+
                "<br/><b>env_personName="+env.getProperty("person.name")+"</b>"+
                "<br/><b>env_personvalName="+env.getProperty("personval.name")+"</b>"+
                "<br/><b>env_address0="+env.getProperty("address[0]")+"</b>"+
                "<br/><b>env_msg1="+env.getProperty("msg1")+"</b>"+
                "<br/><b>env_msg2="+env.getProperty("msg2")+"</b>"+
                "<br/><h1 style=\"color:red;\">-------【ConfigurationProperties】----------</h1>"+
                "<br/><b>person="+person+"</b>"+
                "";
        for (String item: person.getAddress())
        {
            res+="<br/><b>person.Addressitem="+item+"</b>";
        }

        return res;
    }
}

运行结果

控制台结果

-------Value引入】----------
name=abc
personName=zhangsan
personvalName=xiaoming
address0=beijing
msg1=hello \n world
msg2=hello 
 world
-------【对象引入】----------
env_name=abc
env_personName=zhangsan
env_personvalName=xiaoming
env_address0=beijing
env_msg1=hello \n world
env_msg2=hello 
 world
-------ConfigurationProperties----------
person.name=personModel{name='zhangsan', age=20}
person.Addressitem=beijing
person.Addressitem=shanghai

控制台截图
在这里插入图片描述
转义字符重点

#纯量
msg1: 'hello \n world' #单引号忽略转义字符
msg2: "hello \n world" #双引号识别转义字符

网页结果

-------Value引入】----------

name=abc
personName=zhangsan
personvalName=xiaoming
address0=beijing
msg1=hello \n world
msg2=hello world
-------【对象引入】----------

env_name=abc
env_personName=zhangsan
env_personvalName=xiaoming
env_address0=beijing
env_msg1=hello \n world
env_msg2=hello world
-------ConfigurationProperties----------

person=personModel{name='zhangsan', age=20}
person.Addressitem=beijing
person.Addressitem=shanghai

下面搜网页截图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nvm介绍、下载、安装、配置及使用

一、背景 在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff0c;nvm就…

Linux C 程序 【04】线程分离

1.开发背景 Linux 线程区分于FreeRTOS&#xff0c;线程的属性形态有2中&#xff0c;在 pthread.h 中有注解&#xff0c;如下。 /* Detach state. */ enum {PTHREAD_CREATE_JOINABLE, #define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLEPTHREAD_CREATE_DETACHED #defin…

72v-85v输出12v/13.5v电流6A用在电自上AH1009

135-3806-7573.在探讨“72V-85V输出12V/13.5V电流6A用在电动自行车&#xff08;电自上&#xff09;AH1009”这一主题时&#xff0c;我们深入到一个结合了电力电子技术、电池管理系统以及电动自行车性能优化的专业领域。。 *****芯片概述&#xff1a; AH1009是一款宽电压范围、…

数据中心服务器监控系统搭建方案

数据中心监控系统搭建方案 1、背景2、环境3、部署3.1、终端部署3.1.1、服务器配置3.1.1.1、浪潮服务器3.1.1.2、曙光服务器 3.2、服务端部署3.2.1、在线环境下载3.2.2、离线环境安装3.2.3、系统配置 1、背景 服务部署与三个网络环境中&#xff0c;其中某个网位于线下机房&…

Leetcode面试经典150题-2.两数相加

2. 两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外&#xff0c;这两个数都不…

重塑视觉界限:探索InstantID,超越ReActor的下一代换脸技术!

马斯克与郭德纲&#xff0c;一位是相声界的顶流&#xff0c;一位是科技界的大咖。 想象一下&#xff0c;他们的形象融合&#xff0c;会是什么样&#xff1f; 最新推出的开源项目 —— InstantID 让这种“跨界融合”成为可能。 来瞧瞧&#xff0c;“马德纲”有惊艳到你吗&…

回归预测|基于麻雀优化深度神经网络的数据回归预测Matlab程序SSA-DNN 多特征输入单输出 含基础深度神经网络DNN

回归预测|基于麻雀优化深度神经网络的数据回归预测Matlab程序SSA-DNN 多特征输入单输出 含基础深度神经网络DNN 文章目录 前言回归预测|基于麻雀优化深度神经网络的数据回归预测Matlab程序SSA-DNN 多特征输入单输出 含基础深度神经网络DNN 一、SSA-DNN模型1. 麻雀优化算法&…

想发SCI,先写论文还是先选刊?手把手带你分析如何提高发表成功率!

点击关注&#xff1a;关注GZH【欧亚科睿学术】&#xff0c;GET完整版2023JCR分区列表&#xff01; 发SCI是先写论文还是先选刊 发SCI论文时&#xff0c;通常建议先选择合适的期刊再开始写论文。 先选刊的策略意味着你在撰写论文之前&#xff0c;先确定一个或多个可能投稿的期…

2021-11-08 51单片机2位秒表启动清零

缘由c51单片机&#xff0c;程序&#xff0c;仿真图&#xff0c;求帮助-编程语言-CSDN问答 #include "REG52.h"sbit K1 P1^0; sbit K2 P1^1; sbit K3 P1^2; sbit K4 P1^3; sbit P1_0P2^0; sbit P1_1P2^1; sbit P1_2P2^2; sbit P1_3P2^3; sbit P1_4P2^4; sbit P1_…

C++八股文(一)

&#x1f3f3;‍&#x1f308;C基础 &#x1f331;1.C特点 1. C 在 C 语言基础上引入了 面对对象 的机制&#xff0c;同时也 兼容 C 语言 。 2. C 有三大特性 &#xff08; 1 &#xff09;封装。&#xff08; 2 &#xff09;继承。&#xff08; 3 &#xff09;多态&#xff…

网站模板建站和定制网站哪个更适合中小企业?

通俗来说&#xff0c;网站建设有模板建设、定制建站两个门类。在聊聊网站建设多少钱之前&#xff0c;我们可以先来简单分析一下模板建站和定制建站的优缺点在哪。 一、模板建站 优势&#xff1a;1.极大看重性价比&#xff0c;价格优势会较高。 劣势&#xff1a;1.因是在已有的模…

Datawhale AI夏令营--从零入门多模态大模型数据合成Task1

从零入门多模态大模型数据合成 报名赛事注意事项 创建实例跑baseline(预计时间300分钟)改用无卡模式开机创建非指定镜像 下载赛事所需文件包下载模型,数据集以及依赖软件下载模型和相关数据集下载BLIP图片描述模型 数据处理与合成推理和评测打包输出运行结果提交结果 报名赛事 …

Open3D 计算点云的协方差矩阵(原理详细版)

目录 一、概述 1.1协方差矩阵的定义 1.2实现步骤 1.3应用 二、代码实现 1.1实现代码 2.2协方差应用案例 2.2.1主成分分析法的应用 2.2.2平面拟合 三、疑问解答 3.1为什么计算协方差矩阵要去质心&#xff1f; 3.1.1原因 3.1.2区别 Open3D点云算法汇总及实战案例汇总…

WordPress建站之头像及字体错误修正

目录 一、谷歌字体 二、头像网址 三、后续使用中的“坑” 网站建设好以后&#xff0c;会发现有些卡顿&#xff0c;网速好的环境感觉不明写&#xff0c;但是差的环境就难以忍受了。这是打开网页的控制台&#xff08;Console&#xff09;会发现有报错信息&#xff1a; 这些报错…

数组---怎么样定义和引用数组

一怎么定义数组 例 int a[10]; //定义了一个一维数组&#xff0c;数组名为a&#xff0c;此数组包含10个整型元素 所以我们了解到数组的基本定义为 类型符 数组名 [常量表达式] 定义数组可以包括常量和符号常量如 int [ 35 ];但是不能利用变量定义如 int n&#xff1b; …

数据结构(6_1_1)——图的基本概念

图的定义 图G由顶点集V和边集E组成&#xff0c;记为G(V,E),其中V(G)表示图G中顶点的有限非空集&#xff1b;E(G)表示图G中顶点之间的关系(边)集合。若V{v1,v2,.....,vn},则用|V|表示图G中顶点的个数&#xff0c;也称图G的阶&#xff0c; ,用|E|表示图G中的边的条数 注意&…

【产品那些事】The OX Active ASPM Platform

文章目录 前言关于OX Security产品理念 流程体验Complete Visibility&#xff1a;将安全无缝嵌入到SDLC中PBOMOSC&R coverageContextualized Prioritization&#xff1a;快速解决最关键的风险Accelerated Response&#xff1a;简化安全流程See Beyond the Code&#xff1a;…

idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败

解决办法&#xff0c;查看node_modules所在盘&#xff0c;右击点击属性-工具&#xff0c;点击检查驱动&#xff0c;查完后修复即可&#xff0c; 就能够成功删除损坏的文件了

实时降水、降雨量接口对接,预报未来2小时有没有下雨

可实现的效果图 接口请求地址&#xff1a; http://ykyrain.tianqiapi.com 请求示例&#xff1a; http://ykyrain.tianqiapi.com/?versionrain&appid17256853&appsecretYtFbK6VP&lng114.302953&lat30.585411 请求参数 参数名必选类型说明备注&#xff08;示…

[ 烧录教程 ]Phy6212-ST17H66快捷烧录调试-体验蓝牙烧写调试助手

目录 一、前言 二、任务要求 三、实现步骤 3.1 打开基本任务例程 3.2 编辑任务代码 3.3 通过蓝牙烧写调试助手查看效果 3.4 修改完善代码 3.5 继续烧写调试 四、总结 一、前言 基于Phy6212或ST17H66芯片的烧写的繁琐性&#xff0c;因此我将使用蓝牙调试助手完成本文中…