Spring Boot: Yaml配置文件 以及 @ConfigurationProperties屬性獲取

Yaml配置文件

概述

Spring Boot在支持application.properties配置文件的同時,也支持application.yaml配置文件.
配置文件中的屬性,能夠經過:java

  • 經過@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表示:spring

#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:app

  • 能夠添加註解,對屬性值進行校驗,諸如@NotBlank,@Pattern等;
  • 經過public static class Credentials類,將屬性值注入Object對象內;
  • 經過@PropertySource註解實現從指定的配置文件讀取屬性設置.

@Value屬性獲取

hello.world.name=xiaoming

或者spring-boot

hello:
  world:
    name: xiaoming

在屬性文件中添加以上配置:學習

@RestController
public class HelloController {

    @Value("${hello.world.name}")
    private String name;
}

Bean中能夠經過@Value獲取屬性值.
關於@value的文章較多,想深刻了解的同窗能夠搜索學習.spa

pom依賴

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

PS:
若是您以爲個人文章對您有幫助,請關注個人微信公衆號,謝謝!
程序員打怪之路code

相關文章
相關標籤/搜索