zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    20201029模拟赛总结
    20201023模拟赛总结
    贪心题目选讲
    博客阅览帮助
    NTT&FFT(快速?变换,以及扩展)
    数论知识小结 [基础篇]
    数论知识小结 [微提高篇]
    零化多项式/特征多项式/最小多项式/常系数线性齐次递推
    牛顿迭代快速求解定义域为多项式的函数零点
    求导/泰勒展开
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7583837.html
Copyright © 2011-2022 走看看