Spring Boot: Yaml配置檔案 以及 @ConfigurationProperties屬性獲取
阿新 • • 發佈:2018-12-27
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:
如果您覺得我的文章對您有幫助,可以掃碼領取下紅包,謝謝!