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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue-router实现路由懒加载( 动态加载路由 )_前端懒加载原理

    vue-router实现路由懒加载( 动态加载路由 )_前端懒加载原理为什么需要懒加载?    像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时vue异步组件 es提案的import() webpack…

    2022年10月7日
    0
  • pycharm 中文输入_pycharm中文输入法

    pycharm 中文输入_pycharm中文输入法1.Pycharm编译器中英文切换1.左上角打开file(文件)—>setting(设置)—plugins(插件)2.搜索chinese,点击安装3.安装完根据提示重启就行2.pycharm输入法不能输入中文1.找到pycharm的bin文件(我的是在/opt/pycharm/bin)2.打开pycharm.sh,在当前区域添加以下代码(我的是第144行)。如果是fcitx输入框架,则ibus换成fcitxexportLC_ALL=zh_CN.UTF-8expor

    2022年8月25日
    3
  • 海龟作图python等边三角形_python 海龟作图[通俗易懂]

    海龟作图python等边三角形_python 海龟作图[通俗易懂]turtle绘图turtle绘图是python中引入的一个简单绘图工具,利用turtle模块绘图又被称为海龟作图,因为绘图过程可以看作是一个小海龟行走的轨迹。海龟就像是屏幕上的画笔,屏幕就是画布。1.1导入turtle模块使用turtle绘图时,首先要导入turtle模块,有以下两种方式:(说明:在python中调入模块函数无外乎两种方法:import+函数名(numpy,matplotlib…

    2022年6月28日
    61
  • Python简介

    引言python是什么?python是编程语言,即python是语言语言有英语、法语、葡萄牙语等,但凡是语言,都是用来沟通的介质。程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算

    2022年3月29日
    46
  • .NET控件名称缩写一览表「建议收藏」

    .NET控件名称缩写一览表「建议收藏」.NET控件名称缩写一览表

    2022年4月24日
    40
  • 关于sql和MySQL的语句执行顺序(必看!!!)[通俗易懂]

    关于sql和MySQL的语句执行顺序(必看!!!)[通俗易懂]今天遇到一个问题就是mysql中insertinto和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。一、sql执行顺序(1)from(3)join(2)on(4)where…

    2022年6月4日
    26

发表回复

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

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