使用YAML代替Properties

2023-10-31

23.6. 使用YAML代替Properties

YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将SnakeYAML 库放到classpath下,SpringApplication类都会自动支持YAML作为properties的替换。

:如果你使用’starter POMs’,spring-boot-starter会自动提供SnakeYAML。

23.6.1. 加载YAML

Spring框架提供两个便利的类用于加载YAML文档,YamlPropertiesFactoryBean会将YAML作为Properties来加载,YamlMapFactoryBean会将YAML作为Map来加载。

示例:

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

上面的YAML文档会被转化到下面的属性中:

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

YAML列表被表示成使用[index]间接引用作为属性keys的形式,例如下面的YAML:

my:
   servers:
       - dev.bar.com
       - foo.bar.com

将会转化到下面的属性中:

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

使用Spring DataBinder工具绑定那样的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中有个java.util.List或Set类型的属性,并且需要提供一个setter或使用可变的值初始化它,比如,下面的代码将绑定上面的属性:

@ConfigurationProperties(prefix="my")
public class Config {
    private List<String> servers = new ArrayList<String>();
    public List<String> getServers() {
        return this.servers;
    }
}

23.6.2. 在Spring环境中使用YAML暴露属性

YamlPropertySourceLoader类能够用于将YAML作为一个PropertySource导出到Sprig Environment。这允许你使用熟悉的@Value注解和占位符语法访问YAML属性。

23.6.3. Multi-profile YAML文档

你可以在单个文件中定义多个特定配置(profile-specific)的YAML文档,并通过一个spring.profiles key标示应用的文档。例如:

server:
    address: 192.168.1.100
---
spring:
    profiles: development
server:
    address: 127.0.0.1
---
spring:
    profiles: production
server:
    address: 192.168.1.120

在上面的例子中,如果development配置被激活,那server.address属性将是127.0.0.1。如果development和production配置(profiles)没有启用,则该属性的值将是192.168.1.100。

23.6.4. YAML缺点

YAML文件不能通过@PropertySource注解加载。所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用YAML代替Properties 的相关文章

  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 通过浏览器关闭页面时出现 Websocket 错误:“已建立的连接被主机中的软件中止”

    我开发了一个实时通知系统Spring 4 代码可以在 Github 上找到 github com vdenotaris Spring Messaging https github com vdenotaris Spring Messagin
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 雪花ID生成

    package com zfsw spzx access service import lombok extern slf4j Slf4j import org apache commons lang3 StringUtils import
  • 教师节到了,用Python做了个非常好用的学生点名系统

    教师节到了 用Python做了个非常好用的学生点名系统 教师节到了 祝伟大的老师们教师节快乐 前言 我的亲人和朋友里有很多老师 根据我的调查 现在的学生大部分都很积极 会主动举手回答问题 但是 也会遇到一些不好的情况 比如年级越高主动举手的
  • esp学习笔记一环境搭建

    文章目录 开发板资料 环境安装 编译程序 wsl终端 开发板资料 https docs espressif com projects esp idf zh CN latest get started get started devkitc
  • eladmin代码生成详细过程

    eladmin代码生成详细过程 笔记介绍 大家好 这里是千寻简笔记 我是作者星辰 笔记内容整理并发布 内容有误请指出 笔记源码已开源 前往Gitee搜索 chihiro notes 感谢您的观看 作者各大平台直链 GitHub Gitee
  • 基于Android网上在线学生选课系统

    老师要求 1 调研了解学生选课的流程 并做好需求分析 2 APP模式 3 设计角色 学生 工作人员等 4 工作人员管理课程信息 教师信息 学生信息 选课信息等 设置选课时间 选课班级等 5 学生登录 选课 查询成绩等 6 扩展功能 短信提示
  • windows scp下载较大文件出错

    在 ssh config中加入 Host 断开时重试连接的次数 ServerAliveCountMax 10 每隔30秒自动发送一个空的请求以保持连接 ServerAliveInterval 30 参考 https zhuanlan zhi
  • idea 2023.1设置:字体设置及自动调整大小

    一 原界面截图 二 修改字体设置 2 1 Font设置字体及大小 与下面相比 能调整字体和行高 2 2 鼠标滚轮调整字体大小 与上面相比 Ctrl 滑轮 只能调整字体大小 如果找不到 可直接搜 wheel 三 修改后界面截图 组合键在修改字
  • 《算法二》选择排序算法及它的时间复杂度

    1 选择排序算法 选择排序算法的时间复杂度为O N 2 选择排序算法规则 1 指定位置的数和后面的数比较 2 如果指定位置的数大 则两个数交换位置 3 向后移动一个位置 和指定位置的数进行比较 假设数组大小 n 第一轮比较n 1次 最小的数
  • 【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)

    系列文章 如何训练一个中英翻译模型 LSTM机器翻译seq2seq字符编码 一 如何训练一个中英翻译模型 LSTM机器翻译模型训练与保存 二 如何训练一个中英翻译模型 LSTM机器翻译模型部署 三 如何训练一个中英翻译模型 LSTM机器翻译
  • Pytorch 基础之张量合并与分割

    本次介绍一下 Tensor 张量合并与分割常用的一些方法 1 torch cat tensors dim 0 out None Tensor 方法释义 对除了要合并维度之外 其它维度 shape 都一样的 tensor 序列 数组或列表 进
  • 新手学习须注意的问题

    注意事项 1 最新版本的MDK软件Keil的编译器版本已更新到v6 且与v5版本不兼容 之前老的项目编译使用v6版编译器都会出错 建议使用老版本的Keil 如v5 36等 单纯安装v5版本的编译器比较麻烦 Keil v536同时自带v5 v
  • linux用rdate命令实现同步时间

    author skate time 2010 05 07 用rdate命令实现同步时间 前两天说到用ntp时间服务器和ntpdate命令同步时间 今天简单记录下用rdate同步时间 http blog csdn net wyzxg arch
  • Webplus网站群管理平台介绍

    简介 Webplus网站群管理平台采用模块化设计 无需用户编程 便可轻松规划 建设一个或多个功能强大的动态信息门户网站 可以同时建立多个信息相关联的网站 所有网站制作和管理均基于统一的身份认证 简单而实用的流程管理 可以做到单个网站的多部门
  • Long类型雪花算法ID返回前端后三位精度缺失问题解决

    目录 一 问题描述 二 问题复现 1 Maven依赖 2 application yml 配置 3 DemoController java 4 snowflakePage html 页面 5 DemoControllerAdvice jav
  • matlab用抛物线族表示马鞍面,matlab画马鞍面

    118 125 H sig ci ttest x 115 H sig ci ttest y 115 h sig ci ttest2 x y 1 在同一平面中的两个窗口分别画出心形线和马鞍面 的图形 例如 螺旋曲线 以及难以靠手工绘制得到理想
  • 自媒体、短视频博主都在用这5个免费视频网站

    相信不少朋友在剪辑短视频的的时候 不是因为技术不过关 而是没有合适的素材 没有素材情况下 第一想到的就是百度找素材网站 好不容易找到可能还需收费 如果你要是在剪辑的时候没有素材 那么可以看看我推荐的这个几个网站 基本都是可以免费下载的 对你
  • Matlab:数据拟合工具箱与实例

    Matlab 数据拟合工具箱与实例 Matlab 的数据拟合工具箱 Curve Fitting Toolbox 是一个非常实用的工具 可以帮助研究人员和工程师解决各种数据拟合问题 该工具箱包含了多个经典的数据拟合算法 例如最小二乘法 非线性
  • soso313.cn、dao234.com等劫持浏览器,tlntsvi_1547.exe、ydzyh.exe、scvhost.exe等做怪

    soso313 cn dao234 com等劫持浏览器 tlntsvi 1547 exe ydzyh exe scvhost exe等做怪 一位网友的电脑中了病毒 用超级巡警查杀后 每次开机进入Windows桌面后都会弹出对话框 提示找不到
  • 2021年IDEA通过jdbc连接MySql的方式

    很崩溃的几天 这篇文章解决一个问题 在运行 Class forName com mysql cj jdbc Driver 时报错 java lang ClassNotFoundException com mysql cj jdbc Driv
  • 使用YAML代替Properties

    23 6 使用YAML代替Properties YAML是JSON的一个超集 也是一种方便的定义层次配置数据的格式 无论你何时将SnakeYAML 库放到classpath下 SpringApplication类都会自动支持YAML作为pr