SpringBoot如何读取数组配置项

247 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

背景

今天在摸鱼的间隙写一些bug,没想到不写不知道,一写吓一跳,自己真的菜到抠脚,在一个很简单的坑面前浪费了一下午美好 的摸鱼时光。下面就来简单说一下这个经历,希望大家引以为鉴。

经过

事情是这样的,本人在写SpringBoot的crud的时候,由于某些原因写了一个过滤器,要针对一些特殊的url放行,所以我就在application.yml中配置了一个属性,考虑到是好几个类型的url需要放行,所以考虑定义一个数组,然后在filter的configration配置中通过@Value注解注入一个List来获取就行了,so easy,想好了就立马开始敲代码

  • yml增加配置
userinfo-filter:
  filter-excludeUrls:
    - "/user/file/**"
    - "/user/sdf/**"
  • 在configration中注入
@Configuration
public class UserFilterConfig {

    @Value("${userinfo-filter.filter-excludeUrls}")
    private List<String> IgnoreUrlList;

    /**
     * 注册filter
     * @return
     */
    @Bean
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();
        registration.setFilter(addUserInfoFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("excludeUrls", StringUtils.join(IgnoreUrlList, ","));
        registration.setName("addUserInfoFilter");
        return registration;
    }

    /**
     * addUserInfoFilter
     * @return Filter
     */
    @Bean
    public Filter addUserInfoFilter() {
        return new AddUserInfoFilter();
    }

}
  • 然后在filter中获取excludeUrls进行放行 三下五除二就搞定了,这么简单的事情我甚至都不想验证一下就提交代码。算了,为了满足下自己一次性搞定的成就感我还是验证一下吧。 接着启动项目,postman调用接口。。。打脸了,不起作用,我提起精神,打个断点看下,原来是IgnoreUrlList配置的值没有注入进来,为啥不能注入呢,我试了一遍又一遍就是不行。算了,放下我的自尊心开始百度谷歌。找了一会才发现,原来@Vlaue就是不支持注入数组的,规则就是这样,我的基础还是太差了,这个知识点竟然没有听过,浪费了好些时间。那为啥不支持呢?我不得而知。 但是SpringBoot总是提供了解决办法:使用配置类注入即可。
@Component
@ConfigurationProperties(prefix = "userinfo-filter")
public class UserFilterIgnoreUrlConfig {

    private Set<String> filterExcludeUrls;

    public Set<String> getFilterExcludeUrls() {
        return filterExcludeUrls;
    }

    public void setFilterExcludeUrls(Set<String> filterExcludeUrls) {
        this.filterExcludeUrls = filterExcludeUrls;
    }
}

好吧,问题解决了,但是至于为啥不支持数组我还是没搞明白,评论区有大佬知道烦请告知。

总结 古话说得好,基础不牢,地动山摇。真是没错,基础没打好,遇到个基础的小问题就很浪费时间,搞技术还是得脚踏实地打好基础,才能事半功倍。 与大家共勉!