zoukankan      html  css  js  c++  java
  • Spring Boot: Yaml配置文件 以及 @ConfigurationProperties属性获取

    Yaml配置文件

    概述

    Spring Boot在支持application.properties配置文件的同时,也支持application.yaml配置文件.
    配置文件中的属性,可以通过:

    • 通过@Value注解将属性值注入Bean中;
    • 通过@ConfigurationProperties注解将属性值注入Bean中.

    此处不推荐使用@Value方式注入属性,原因有二:

    • 对于较为复杂的数据结构难以设置,诸如Map,Object;
    • 不支持对属性值进行校验,诸如@Length,@Size等.

    示例

    #Simple properties
    mail.host=mailer@mail.com
    mail.port=9000
    mail.from=mailer@mail.com
    
    #List properties
    mail.defaultRecipients[0]=admin@mail.com
    mail.defaultRecipients[1]=owner@mail.com
    
    #Map Properties
    mail.additionalHeaders.redelivery=true
    mail.additionalHeaders.secure=true
    mail.additionalHeaders.p3=value
    
    #Object properties
    mail.credentials.username=john
    mail.credentials.password=password
    mail.credentials.authMethod=SHA1
    

    以上为application.properties示范配置,下面将使用yaml表示:

    #Simple properties
    mail:
      host: mailer@mail.com
      port: 9000
      from: mailer@mail.com
    #List properties
      defaultRecipients:
        - admin@mail.com
        - owner@mail.com
    #Map Properties
      additionalHeaders:
        redelivery: true
        secure: true
        p3: true
    #Object properties
      credentials:
        username: john
        password: password
        authMethod: SHA1
    

    通过两份配置文件的比较,个人认为Yaml配置文件通过树形结构更加清晰明了.
    两份文件同时展示了List,Map,Object形式配置文件的设置,可供大家参考.

    @ConfigurationProperties属性获取

    @Getter
    @Setter
    @Configuration
    //@PropertySource("classpath:configprops.properties")
    @ConfigurationProperties(prefix = "mail")
    @Validated
    public class ConfigProperties {
    
        @Validated
        @Getter
        @Setter
        public static class Credentials {
    
            @Length(max = 4, min = 1)
            private String authMethod;
            private String username;
            private String password;
        }
    
        @NotBlank
        private String host;
        @Min(1025)
        @Max(65536)
        private int port;
        @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$")
        private String from;
        private Credentials credentials;
        private List<String> defaultRecipients;
        private Map<String, String> additionalHeaders;
    }
    

    上述代码为获取Yaml配置文件中的属性值类,并且使用Configuration将类作为Bean提供给程序使用(可以去除此注解,将属性类型通过@Autowired注解注入Bean中).
    注意,此处使用@ConfigurationProperties注解,获取前缀为mail的属性值.

    Tips:

    • 可以添加注解,对属性值进行校验,诸如@NotBlank,@Pattern等;
    • 通过public static class Credentials类,将属性值注入Object对象内;
    • 通过@PropertySource注解实现从指定的配置文件读取属性设置.

    @Value属性获取

    hello.world.name=xiaoming
    

    或者

    hello:
      world:
        name: xiaoming
    

    在属性文件中添加以上配置:

    @RestController
    public class HelloController {
    
        @Value("${hello.world.name}")
        private String name;
    }
    

    Bean中可以通过@Value获取属性值.
    关于@value的文章较多,想深入了解的同学可以搜索学习.

    pom依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    

    PS:
    如果您觉得我的文章对您有帮助,请关注我的微信公众号,谢谢!
    程序员打怪之路

  • 相关阅读:
    静态检查lua语法工具luacheck
    centos7系列:
    git submodule 教程
    CENTOS 7 安装redis
    python基本语法:
    彻底理解lib和dll
    C++语言的设计与演化(空白):
    《Effective C++》 目录:
    C++进阶书籍(转)
    学习的心态(转)
  • 原文地址:https://www.cnblogs.com/jason1990/p/10187966.html
Copyright © 2011-2022 走看看