在日常开发使用 SpringBoot 框架时,经常有一些配置信息需要放置到配置文件中,我们需要手动读取这些配置到应用中进行一些逻辑,这里整理了一些常用读取配置的方法,简单介绍一下。
配置方便,支持赋值复杂类型
使用灵活,方便对读取数值进行定制化处理,可赋值给静态化变量
二者区别 | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
赋值静态化属性 | 据说可以,笔者未成功 | 支持 |
application.yml配置文件内容:
jiug:name: keffettage: 18school: 淮北师范大学,五河县第二中学technicalList :- name: 驾驶证grade: C1- name: 计算机grade: 二级
使用@ConfigurationProperties对配置属性进行赋值
@Data
@Configuration
@ConfigurationProperties(prefix = "jiug")
public class ConfigJiug {private String name ;// JSR303数据校验@NotNull@Min(0)private int age ;// 默认值private String loc = "中国" ;// listprivate List school ;// list对象private List technicalList ;}
@Data
class Technical {private String name;private String grade;
}
要使用JSR 303校验,需要在Spring Boot应用程序的依赖中添加以下依赖:
org.springframework.boot spring-boot-starter-validation
application.yml配置文件内容:
jiug:name: keffettage: 18declaration: 认识世界,school: 淮北师范大学,五河县第二中学
使用 @Value 读取配置文件
@Component
public class ConfigConstant {@Value("${jiug.name}")private String name ;@Value("${jiug.age}")private int age = 24 ;// 设置默认值@Value("${jiug.loc:中国}")private String loc;// 使用 SpEL 表达式@Value("#{configJiug.age > 18 ? 'adult' : 'child'}")private String status;// 赋值到静态变量public static String declaration ;@Value("${jiug.declaration}")public void setDeclaration(String declaration) {ConfigJiug.declaration = declaration;}// listprivate List school ;@Value("${jiug.school}")public void setSchool(String school) {this.school = Arrays.asList(school.split(","));}// list对象 不支持,可以配置json串,然后在set方法中解析}