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 注解不能同时使用

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-11-27 17:58  Marydon  阅读(15)  评论(0编辑  收藏  举报