SpringBoot 如何解析配置文件中的list?
1.情景展示
在配置文件当中,我们是可以使用list来设置参数对应的参数值的(也就是:参数值可以是list)。
YML文件
如上图所示,在配置文件当中(如:Yml) ,我们是可以直接使用list。
其格式就是:
下划线➕空格,后面跟数组元素即可,一行就代表一个元素。
properties文件
如果是在properties文件当中的话,格式如下:
参数[数组元素索引]=参数值(数组元素的位置从0开始)
一行设置一个参数值,多个数组元素索引不能相同,否则下面应该会把上面的参数值给覆盖掉。
示例:
这种格式是无法使用@Value注解解析的,该如何解析呢?
2.具体分析
要想能解析到配置文件当中的list,需要单独为参数创建一个配置类并在需要使用的类中注入该对象。
3.解决方案
第一步:增加配置类
@Configuration
@ConfigurationProperties("filter")
public class FilterListConfig {
private List<String> paths2;
public List<String> getPaths2() {
return paths2;
}
public void setPaths2(List<String> paths2) {
this.paths2 = paths2;
}
}
说明:
注解@ConfigurationProperties("参数名称的第一级");
类的属性名设为:参数名称的第二级。
第二步:注入配置类对象并使用
@Autowired
private FilterListConfig listConfig;
// listConfig.getPaths2();
4.拓展
如上面所说的那样,你会发现:
当在配置文件当中使用list来配置多个参数值时,我们没办法通过注解的方式来直接取值,还需要增加配置类。
所以说,我个人是不喜欢使用这种方式的。
这里,推荐大家使用逗号隔开的方式,然后在Java类中取值的时候,又可以分为两种实现方式。
配置文件
格式:value1,value2,...
说明:
多个值之间使用逗号隔开,逗号前后不能带空格;
行末不要带空格和逗号。
具体用法示例
第一种替代方式
注解取值
直接使用数组接收即可。
@Value("${paramName全路径}")
private String[] 成员变量名称;
第二种替代方式(推荐使用)
在注解当中直接将其拆分成list。
注解取值
格式:
@Value("#{'${param}'.split(',')}")
private List<String> values;
这样,接收到的就是list,十分方便。
第一种方式的变形
如果觉得数组Array用着不方便,我们其实是可以将其转换成List对象的。
借助@PostConstruct实现。
注意:
@Value 注解和 @AllArgsConstructor 注解不能同时使用。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/18572809