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:
如果您觉得我的文章对您有帮助,请关注我的微信公众号,谢谢!