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:
如果您覺得我的文章對您有幫助,請關注我的微信公眾號,謝謝!

