1. 程式人生 > >Spring Boot: Yaml配置檔案 以及 @ConfigurationProperties屬性獲取

Spring Boot: Yaml配置檔案 以及 @ConfigurationProperties屬性獲取

Yaml配置檔案

概述

Spring Boot在支援application.properties配置檔案的同時,也支援application.yaml配置檔案.
配置檔案中的屬性,可以通過:

  • 通過@Value註解將屬性值注入Bean中;
  • 通過@ConfigurationProperties註解將屬性值注入Bean中.

此處不推薦使用@Value方式注入屬性,原因有二:

  • 對於較為複雜的資料結構難以設定,諸如Map,Object;
  • 不支援對屬性值進行校驗,諸如@Length,@Size等.

示例

#Simple properties
[email protected]
mail.port=9000 [email protected] #List properties mail.defaultRecipients[0][email protected] mail.defaultRecipients[1][email protected] #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: [email protected]
  port: 9000
  from: [email protected]
#List properties
  defaultRecipients:
    - [email protected]
    - [email protected]
#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._%+-][email protected][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:
如果您覺得我的文章對您有幫助,可以掃碼領取下紅包,謝謝!