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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM