YAML/Properties配置文件与Spring Boot(转)
多年来,Java开发人员依赖于属性文件或xml文件来指定应用程序配置。在企业应用程序中,人们可以为每个环境(如开发,分段和生产)创建单独的文件,以定义相应环境的属性。但是,通过Spring引导,我们可以选择在单个“yml”文件中配置所有配置文件。
什么是YAML?
YAML是JSON的超集,因此这是一种非常方便的格式,用于指定分层配置数据。
YAML官网:它是所有编程语言的人性化数据序列化标准。
YAML更易读,对于开发人员的读/写配置文件是有好处的。
YAML设计目标:
从YAML官方规范:
- YAML易于人类阅读。
 - YAML数据在编程语言之间是可移植的。
 - YAML匹配敏捷语言的本机数据结构。
 - YAML具有一致的模型来支持通用工具。
 - YAML支持单程处理。
 - YAML具有表现力和可扩展性。
 - 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解析器,
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.0有Spring 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://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
YAML/Properties配置文件与Spring Boot(转)的更多相关文章
- 基于properties文件的Spring Boot多环境切换
		
当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢? 在Spring Boot中,多环境配置的文件名需要满足appl ...
 - 日志配置文件读取spring boot配置文件中的属性
		
如果是读取 application.properties 这种spring boot的默认配置文件时 其中 scope固定为context 指明从上下文中获取, name 根据自己的意思给, sou ...
 - Spring Boot 揭秘与实战(三) 日志框架篇 - 如何快速集成日志系统
		
文章目录 1. 默认的日志框架 logback2. 常用的日志框架 log4j 1.1. 日志级别 1.2. 日志文件 3. 源代码 Java 有很多日志系统,例如,Java Util Logging ...
 - Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取
		
Yaml配置文件 概述 Spring Boot在支持application.properties配置文件的同时,也支持application.yaml配置文件. 配置文件中的属性,可以通过: 通过@V ...
 - 第二篇:彻底搞清楚 Spring Boot 的配置文件 application.properties
		
前言 在Spring Boot中,配置文件有两种不同的格式,一个是properties,另一个是yaml. 虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明 ...
 - 在spring boot使用总结(九) 使用yaml语言来写配置文件
		
yaml是专门用来写配置文件的语言.使用yaml来写配置文件扩展性比较强而且十分方便.spring boot支持使用yaml语言来写配置文件,使用snakeyaml库来读取配置文件.spring bo ...
 - spring boot -- 配置文件application.properties 换成 application.yml
		
1.前言 其实两种配置文件在spring boot 的作用一样,只是写法不同 ,yml 可以写的内容更少 ,以树结构 书写内容,看起来很清晰, 但是 如果 项目配置文件设置为 既有properties ...
 - spring boot项目配置文件集合
		
表 1. Spring Boot 推荐的基础 POM 文件 名称 说明 spring-boot-starter 核心 POM,包含自动配置支持.日志库和对 YAML 配置文件的支持. spring-b ...
 - Java Spring Boot VS .NetCore (七)  配置文件
		
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
 
随机推荐
- POJ 2187 凸包+旋转卡壳
			
思路: 求个凸包 旋转卡壳一下 就求出来最远点对了 注意共线情况 也就是说 凸包如果有一堆点共线保留端点即可 //By SiriusRen #include <cmath> #incl ...
 - linux学习之路6 Vi文本编辑器
			
vim是vi的增强版本 vim拥有三种模式: 命令模式(常规模式) vim启动后,默认进入命令模式.任何模式都可以通过按esc键回到命令模式(可以多按几次.命令模式可以通过键入不同的命令完成选择.复制 ...
 - 记录sql操作
			
需求:一个a表的A列等于b表的B列 但拥有的相同列C列值不相同 需要将其改成一样的 UPDATE vd_auth_switch vas,tb_student ts set vas.class_id = ...
 - 290 Word Pattern 单词模式
			
给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循这种模式.这里的 遵循 指完全匹配,例如在pattern里的每个字母和字符串 str 中的每个非空单词存在双向单映射关系 ...
 - MVC之参数验证(二)
			
MVC内部针对这此验证是如何实现的咧???现在我们就来分析一下这此验证的背后故事.... 1.ModelValidator与ModelValidatorProvider 虽然Model绑定方式的因绑定 ...
 - Javascript DOM 编程艺术(第二版)读书笔记——基本语法
			
Javascript DOM 编程艺术(第二版),英Jeremy Keith.加Jeffrey Sambells著,杨涛.王建桥等译,人民邮电出版社. 学到这的时候,我发现一个问题:学习过程中,相当一 ...
 - Table标题行冻结,数据行滚动的一种方式
			
这段时间在做Table标题行冻结,数据行滚动,虽然能实现,但也遇到一些问题,记录下来. 首先说说实现,实现其实不难,估计很多人都能想象出来,那就是标题行与内容行分离.我是这么做的,用两个表格,一个只有 ...
 - opencv3.3+vs2015调用笔记本摄像头成功
			
先上代码 成功图片如下: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp&g ...
 - v形 加强版
			
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
 - HTML form without CSRF protection,HTML表单没有CSRF保护
			
HTML form without CSRF protection =HTML表单没有CSRF保护 CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request For ...