美文网首页Spring Boot 核心技术spring mvc or boot
SpringBoot2.x基础篇:使用YAML代替Propert

SpringBoot2.x基础篇:使用YAML代替Propert

作者: 恒宇少年 | 来源:发表于2020-03-26 10:27 被阅读0次

    知识改变命运,撸码使我快乐,2020继续游走在开源界

    点赞再看,养成习惯

    给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案

    YAML是一种用于指定层次结构配置数据的便捷格式,SpringBoot内部通过集成SnakeYAML来支持解析,那我们如果来使用YAML格式来代替Properties,我们需要了解每一种Properties对应YAML的配置代替方式。

    推荐阅读

    普通配置

    普通的方式比较简单直接,不存在数组集合子类等相关配置,我们通过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文件。

    作者个人 博客
    使用开源框架 ApiBoot 助你成为Api接口服务架构师

    相关文章

      网友评论

        本文标题:SpringBoot2.x基础篇:使用YAML代替Propert

        本文链接:https://www.haomeiwen.com/subject/ihpquhtx.html