专栏首页SpringBoot 核心技术SpringBoot2.x基础篇:使用YAML代替Properties的对应配置

SpringBoot2.x基础篇:使用YAML代替Properties的对应配置

普通配置

普通的方式比较简单直接,不存在数组集合子类等相关配置,我们通过Properties方式编写了如下的配置内容:

system.config.max-value=100
system.config.min-value=10
system.config.location=classpath:/configs

那这种方式对应的YAML配置是什么样子的呢?

如下所示:

system:
  config:
    min-value: 10
    max-value: 100
    location: classpath:/configs

这两种方式对比之下,YAML层次感鲜明,更直观的查看配置信息,而Properties这种方式配置前缀相对来说是冗余的,如果配置前缀过长,每一行的配置内容则会更长。

List配置

如果你需要添加List/Set/Array类型的配置信息,使用Properties方式编写如下所示:

system.config.ports[0]=8080
system.config.ports[1]=8081
system.config.ports[2]=8082

注意事项:配置的索引从0开始。

对应上面配置的YAML实现如下所示:

system:
  config:
    ports:
      - 8080
      - 8081
      - 8082

无论是Properties还是YAML格式,这种List的配置内容都可以通过如下的方式获取:

@Configuration
@ConfigurationProperties(prefix = "system.config")
@Data
public class LoadListConfig {
    private List<String> ports;
}

List内实体配置

如果你的List内不是基本数据类型,而是一个实体类,使用Properties的配置方式如下所示:

system.users[0].username=admin
system.users[0].email=yuqiyu@vip.qq.com
system.users[1].username=hengboy
system.users[1].email=jnyuqy@gmail.com

其实跟上面的List配置差不多,不过如果你需要配置每一个索引内字段的值,就要一一指定配置值。

对应上面的YAML实现如下所示:

system:
  users:
    - username: admin
      email: yuqiyu@vip.qq.com
    - username: hengboy
      email: jnyuqy@gmail.com

每一个 - 其实代表集合内的一个元素。

获取List实体配置时我们可以通过如下的方式:

@Data
@Configuration
@ConfigurationProperties(prefix = "system")
public class LoadSystemUserConfig {
    private List<User> users;

    @Getter
    @Setter
    public static class User {
        private String username;
        private String email;
    }
}

YAML缺点

一种方案的诞生是为了解决相应的问题,虽然说存在既有道理,但是每一种方案也不是完美的都有自身的缺点。

下面简单说说YAML的缺点:

  • 配置时缩进要特别注意,如果存在空格缩进对应不齐就会出现问题
  • SpringBoot内无法通过@PropertySource注解加载YAML文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ApiBoot Logging整合SpringCloud Eureka负载均衡上报日志

    ApiBoot Logging支持整合服务注册中心(Eureka、Consul、Nacos Discovery、Zookeeper...)进行上报请求日志,Lo...

    恒宇少年
  • 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?

    恒宇少年
  • 第十八章:SpringBoot项目中使用SpringSecurity整合OAuth2设计项目API安全接口服务

    恒宇少年
  • 如何使用网线登录AP?

    2、配置PC端的IP地址(建议范围:169.254.1.2~169.254.1.254,如配置为169.254.1.100),子网掩码:255.255.255....

    网络技术联盟站
  • GDB文档

    官网提供了PDF、HTML各种版本,如下: Debugging with GDB

    ccf19881030
  • 世界海底光缆分布图

    海底光缆是国际互联网的骨架。光缆的多少,代表一国与互联网的联系是否紧密。 有人利用微软的Bing地图,以及wikipedia的数据,做出了一幅互动式的世界海底光...

    ruanyf
  • dataguard备库的数据文件的迁移(r8笔记第22天)

    关于移动数据库文件,之前写了一篇博文,http://blog.itpub.net/23718752/viewspace-1127910/ 但是在备库中还是有...

    jeanron100
  • Spring Cloud(二):Eureka 服务注册中心

    Spring Cloud Eureka 是基于 Netflix Eureka 来实现服务注册和发现的。它主要包括两个组件:

    朝雾轻寒
  • vue-cli2.0与vue-cli3.0区别

    可以明显的看出来,vue-cli2.0与3.0在目录结构方面,有明显的不同(vue3.0我是安装了css预处理器,所以看上去内容更丰富哈)

    双面人
  • 浅谈JAVA设计模式之——模板方法(TemplateMethod)

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    冰河

扫码关注云+社区

领取腾讯云代金券