YAML/Properties配置文件与Spring Boot(转)

YAML/Properties配置文件与Spring Boot(转)

大家好,又见面了,我是全栈君。

多年来,Java开发人员依赖于属性文件或xml文件来指定应用程序配置。在企业应用程序中,人们可以为每个环境(如开发,分段和生产)创建单独的文件,以定义相应环境的属性。但是,通过Spring引导,我们可以选择在单个“yml”文件中配置所有配置文件。

什么是YAML?

YAML是JSON的超集,因此这是一种非常方便的格式,用于指定分层配置数据。

YAML官网:它是所有编程语言的人性化数据序列化标准。

YAML更易读,对于开发人员的读/写配置文件是有好处的。

YAML设计目标

YAML官方规范

  1. YAML易于人类阅读。
  2. YAML数据在编程语言之间是可移植的。
  3. YAML匹配敏捷语言的本机数据结构。
  4. YAML具有一致的模型来支持通用工具。
  5. YAML支持单程处理。
  6. YAML具有表现力和可扩展性。
  7. YAML易于实施和使用。

我应该怎么考虑呢?

即使您的YAML文件不完整,也无法检测到它,但XML解析器始终检查格式良好的文档。

不要考虑:

YAML文件不考虑良好的序列化,而不像JSON,因为它是基于对象。

那么,XML呢? 

XML主要是机器到机器的通信。

YAML文件示例:

environment:
    profiles: dev
    name: Developer App 
    url: http://dev.abc.com
    
    profiles: qa
    name: QA App 
    url: http://qa.abc.com

哪些Java YAML解析器可用?

有以下可用于Java的YAML解析器,

  1. SnakeYAML
  2. JYaml
  3. YamlBeans
  4. JvYaml

Spring Boot使用SnakeYAML库进行YAML支持。

SnakeYAML

Snakeyaml是Java虚拟机的YAML解析器和发射器。

官方网站:https://bitbucket.org/asomov/snakeyaml

SnakeYAML功能:

  • 一个完整的YAML 1.1解析器。具体来说,SnakeYAML可以解析规范中的所有示例。
  • Unicode支持包括UTF-8/UTF-16输入/输出。
  • 用于序列化和反序列化本机Java对象的高级API。
  • 支持YAML类型存储库中的所有类型  。
  • 相对敏感的错误信息。

所以…

关于YAML,在Spring Boot框架中如何支持读写呢?

是的,如果您的类路径中包含Snakeyaml库,则SpringApplication类将自动支持YAML作为属性文件的替代方法。

如果你在POM使用Starter,那么spring-boot-starter会自动加载yml文件(application.yml)

您可以在这里检查Spring-Boot-Starter

如何在Spring Boot中加载?

YamlPropertiesFactoryBean将加载YAML做为Properties和YamlMapFactoryBean将加载YAML做为Map。

更多的请阅读:Spring Boot Doc

如何使用YamlPropertiesFactoryBean使用Spring Framework加载YAML文件?

从Spring框架4.1.0增加了对YAML的支持,Spring框架4.1.0 maven POM具有Snakeyaml依赖性  。

您可以在Spring Boot应用中使用两种方式加载YAML:

1、使用Java配置类

 @Bean
  public static PropertySourcesPlaceholderConfigurer properties() {
      PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
      YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
      yaml.setResources(new ClassPathResource("appConfig.yml");
      propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
      return propertySourcesPlaceholderConfigurer;
  }

2、使用XML Bean配置

<context:annotation-config/>
 
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
    <property name="resources" value="classpath:appConfig.yml"/>
</bean>
 
<context:property-placeholder properties-ref="yamlProperties"/>

有没有YAML编辑器可用?

是的,现在Spring STS 3.7.0Spring Boot YAML编辑器,它具有引导特定的内容辅助,验证,悬停信息和超链接检测器。它了解Spring Boot的配置元数据。

检查此链接以获取更多信息:STS 3.7.0 YAML编辑器

Spring Boot YAML演示的例子?

如果你想了解spring启动yaml的工作原理,请参考这个例子来自GitHub的Spring-boot-yaml

 

参考:

https://meetsnehal.wordpress.com/2015/09/12/yaml-an-alternative-to-properties-file-with-spring-boot/(以上内容翻译自此篇文章)

https://en.wikipedia.org/wiki/YAML 

http://yaml.org/ 

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config html

https://stackoverflow.com/questions/39474133/spring-boot-using-yaml-instead-of-properties-file

 

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108139.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EXCEL利用VBA把汉字转拼音(李晓锋版)20180828更新「建议收藏」

    EXCEL利用VBA把汉字转拼音(李晓锋版)20180828更新「建议收藏」EXCEL利用VBA把汉字转换为拼音,现在网络中广泛传播的代码存在错误,经过本人严格校对,把修正后的代码分享给大家。代码更新20180607:根据评论,之前的代码的确是无法翻译“瑜琦钰奕”这四个字的拼音,原因是他们的码值没有包含在代码中,现在已添加相应代码。谢谢 likewam  的评论。另外,希望大家能把自己使用过程中发现的所有不能转换的汉字都添加到评论,让我们一起来完善这部分代…

    2022年6月21日
    22
  • HDU 4883 TIANKENG’s restaurant (贪心)

    HDU 4883 TIANKENG’s restaurant (贪心)

    2022年1月26日
    100
  • 兴师动众解决由cookie引发的400报错问题

    兴师动众解决由cookie引发的400报错问题背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息。遇到的问题是购买单程机票的时候,一切流程正常(从航班查询页,选择需要的购买的航班,进入到下单页,进行下单操作);但是购买往返机票的时候,进入到下单页时,发现下单页所有接口都报了400的错误,继而再访问该网站的其他页面也都报了400的错误。一般来说400报错是因为前后端参数格式或者请求头不一致导致的问题,前.

    2022年6月10日
    34
  • mac进入路径_mac终端找不到命令

    mac进入路径_mac终端找不到命令如果你想将当前commandline会话切换到其他目录,需要用到三个命令:pwd,ls和cd。pwd的含义是“printworkingdirectory”,会显示当前目录的绝对路径。 ls的含义是“listdirectorycontents”,它会列出当前目录的内容。这个命令还有其他参数可选。 cd的含义是“changedirectory”,它会改变当…

    2022年10月10日
    2
  • perl正则表达式匹配后的各种变量

    perl正则表达式匹配后的各种变量[root@rwsoda203db1perl_tidb]#catp.pl#!/usr/bin/perlusestrict”subs”;usestrict;usev5.16;my$n=3;my$str=”first.<EM>PARENT</EM>LAST”;$str=~m#(<.*?>)(.*?)(</….

    2022年5月6日
    41
  • socket rst_socket通信编程

    socket rst_socket通信编程产生RST的三个条件:1.目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;2.TCP想取消一个已有的连接;3.TCP接收到一个根本不存在的连接上的分节; 现在模拟上面的三种情况:client:structsockaddr_inserverAdd;bzero(&serverAdd,sizeof(serverAdd));

    2022年10月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号