SpringBoot(5)、使用YAML代替Properties

YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。无论你何时将YAML库放到classpath下,SpringApplication类都会自动支持YAML作为properties的替换。

加载YAML
Spring框架提供两个便利的类用于加载YAML文档:
1、YamlPropertiesFactoryBean会将YAML作为Properties来加载。
2、YamlMapFactoryBean会将YAML作为Map来加载。

例如一:

environments:
    dev:
        url: http://dev.ctw.com
        name: Developer Setup
    test:
        url: http://test.ctw.com
        name: Test Setup
    provide
        url: http://provide.ctw.com
        name: Provide Setup

会转变为:

environments.dev.url=http://dev.ctw.com
environments.dev.name=Developer Setup
environments.test.url=http://test.ctw.com
environments.test.name=Test Setup
environments.provide.url=http://provide.ctw.com
environments.provide.name=Provide Setup

例如二、
YAML列表被表示成[index]间接引用作为属性keys的形式。

my:
    servers:
        - dev.ctw.com
        - test.ctw.com
        - provide.ctw.com

会转变为:

my.servers[0]=dev.ctw.com
my.servers[1]=test.ctw.com
my.servers[2]=provide.ctw.com

使用Spring DataBinder工具绑定那样的属性(这是@ConfigurationProperties做的事),你需要确定目标bean中有个List或Set类型的属性。并且需要提供一个setter或使用可变的值初始化他,比如下面的代码绑定上面的属性:

@ConfigurationProperties(prefix = "my")
public class Config {
        private List<String> servers = new ArrayList<String>();
        public List<String> getServers() {
                return this.servers;
        }
}

多环境配置

server: 
    address: 192.168.0.100
---
spring: 
    profiles: dev
server: 
    address: 192.168.0.110
---
spring: 
    profiles: test
server: 
    address: 192.168.0.120

如果dev配置被激活,那么server.address属性将是192.168.0.110,若dev和test都未被启用,则属性的值将是192.168.0.100。

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg

推荐阅读更多精彩内容