springbootYAML配置及与properties文件对比优缺点
(2019-06-17 07:15:33)
标签:
itjava |
我专门给大家翻译外文IT参考资料,想学的,可以关注,也可以关注我个人自己建的博客:http://www.1024sky.cn
yaml是JSON的超集,因此,它是指定层次结构配置数据的格式。每当类路径上有SnakeYAML 库时,SpringApplication类自动支持yaml作为属性的替代。
如果使用spring-boot-starter,则会自动提供snakeyaml。
2.7.1. 加载YAML
Spring框架提供了两个方便的类,可以用来加载yaml文档。YamlPropertiesFactoryBea
例如,考虑以下yaml文档:
environments:
dev:
url: http://dev.example.com
name: Developer Setup
prod:
url: http://another.example.com
name: My Cool App
前面的示例将转换为以下属性:
environments.dev.url=http://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=http://another.example.com
environments.prod.name=My Cool App
yaml列表用[index]表示为属性键。例如,考虑以下yaml:
my:
servers:
- dev.example.com
- another.example.com
前面的示例将转换为这些属性:
my.servers[0]=dev.example.com
my.servers[1]=another.example.com
要使用Spring Boot的Binder 实用程序(这就是@ConfigurationProperties 所做的)绑定到这样的属性,您需要在java.util.List (或Set)类型的目标bean中有一个属性,并且您需要提供一个setter或用一个可变的值初始化它。例如,以下示例绑定到前面显示的属性:
@ConfigurationProperties(prefix="my")
public class Config {
private List servers = new ArrayList();
public List getServers() {
return this.servers;
}
}
2.7.2. 在Spring中把YAML显示为Properties
YamlPropertySourceLoader类可用于在Spring环境中公开yaml作为PropertySource。这样可以使用带有占位符语法的@Value注释来访问yaml属性。
2.7.3. 多种特定YAML文档
可以在单个文件中指定多个特定yaml文档,并通过使用spring.profiles键指示文档何时应用,如下例所示:
server:
address: 192.168.1.100
---
spring:
profiles: development
server:
address: 127.0.0.1
---
spring:
profiles: production & eu-central
server:
address: 192.168.1.120
在前面的示例中,如果开发文件处于活动状态,则server.address属性为127.0.0.1。同样,如果生产配置文件和UAT配置文件处于活动状态,则server.address属性为192.168.1.120。如果未启用开发、生产和uat配置文件,则属性值为192.168.1.100。
因此,spring.profiles可以包含一个简单的特定文件名(例如production)或特定文件表达式。配置文件表达式允许表达更复杂的配置文件逻辑,例如 production
& (eu-central | eu-west)。有关详细信息,请参阅参考指南。
如果在应用程序上下文启动时没有显式激活,则会激活默认配置文件。因此,在下面的yaml中,我们为 spring.security.user.password设置了一个值,该值仅在“default”配置文件中可用:
server:
port: 8000
---
spring:
profiles: default
security:
user:
password: weak
但是,在下面的示例中,总是设置密码,因为它没有附加到任何配置文件,并且必须根据需要在所有其他配置文件中显式重置密码:
server:
port: 8000
spring:
security:
user:
password: weak
使用spring.profiles元素指定的Spring配置文件可以通过使用否定!符号。如果为单个文档同时指定了否定配置文件和非否定配置文件,则必须至少匹配一个非否定配置文件,并且不能匹配任何否定配置文件。
2.7.4. YAML 缺点
无法使用@PropertySource
注释加载yaml文件。因此,在需要以这种方式加载值的情况下,需要使用properties文件。
在特定的yaml文件中使用多种yaml文档语法可能会导致意外行为。例如,在一个名为application-dev.yml的文件中考虑以下配置,其中
dev配置文件处于活动状态:
server:
port: 8000
---
spring:
profiles: !test
security:
user:
password: weak
在上面的示例中,配置文件否定表达和配置文件表达式的行为将不符合预期。我们建议您不要将特定的yaml文件和多个yaml文件结合起来,只使用其中一个。
2.7.5 YAML 与properties对比
springboot大多是使用.yml文件配置的。将yml与properties对比之后发现,yml最大的好处在于其拥有天然的树状结构,所以着手尝试将properties文件更改为yml文件,发现了几个要注意的地方:
1、在properties文件中是以”.”进行分割的, 在yml中是用”:”进行分割;
2、yml的数据格式和json的格式很像,都是K-V格式,并且通过”:”进行赋值;
3、在yml中缩进一定不能使用TAB,否则会报很奇怪的错误;(缩进特么只能用空格!!!!)
4、每个k的冒号后面一定都要加一个空格;
5、使用spring cloud的maven进行构造的项目,在把properties换成yml后,一定要进行mvn clean
insatll
我最近翻译了Springboot的官方英文文档,大家可以去看看其它内容:
1、官方入门文档
http://www.itmanclub.com/blog/article/39
2、官方spring-boot-features文档
2.1、Spring应用程序
2.2、读取外部配置
2.3、多环境配置
2.4、日志配置
2.5、国际化及JSON
2.6、开发Web应用程序
第一部分
第二部分
2.7、安全性
2.8、使用SQL数据库
2.9、与NoSQL技术关联
2.10、Caching缓存
2.11、消息队列
2.12、调用REST服务的两种方法
2.13、验证
2.14、邮件、http://www.itmanclub.com/blog/article/30#mail
2.15、分布式事务
2.16、Hazelcast
2.17、Quartz
2.18、任务执行和调度
2.19、Spring集成http://www.itmanclub.com/blog/article/33#integration
2.20、Spring会话
2.21、JMX监控和管理http://www.itmanclub.com/blog/article/33#jmx
2.22、Springboot测试
第一部分
第二部分http://www.itmanclub.com/blog/article/35
2.23、WebSocket
2.24、Web Services
2.25、创建你自己的自动配置http://www.itmanclub.com/blog/article/37
2.26、 Kotlin支持
3.官方howto文档
3.1、Spring Boot 应用程序
3.2、属性和配置
3.3、嵌入式Web服务器
3.4、SpringMVC
3.5、Security
3.6、Jersey
3.7、HTTP客户端
3.8、日志
3.1、数据库访问相关http://www.itmanclub.com/blog/article/10
3.9、数据库初始化
3.10、 消息
3.10、批处理
3.12、Actuator
3.13、安全
3.14、 热部署
3.15、构建
3.16、传统部署方法

加载中…