为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Spring 属性中扩展通配符?

如何在 Spring 属性中扩展通配符?

暮色呼如 2023-05-17 14:58:59
我正在开发 spring boot 应用程序,我想像这样注入资源集合:@Value("${app.users-location}") Collection<Resource> csvResources;我在里面application.properties写了以下内容:app.users-location=/feed/*.csv但它没有按预期工作:对于那种情况,我希望看到 Collection of 5 elements of type Resource。我怎样才能实现它?
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

这是有效的:


@Value("app.users-location")

String foo; // inject "/feed/*.csv"

这也是有效的(来源):


@Value("classpath*:/feed/*.csv")

Collection<Resource> resources; // inject all resources located in this classpath

但我不知道如何将它们混合在一个注释中:即解析属性并将其与前缀一起使用classpath*:。也许这是可能的...


不管怎样,作为替代方案,我会注入这个属性app.users-location=/feed/*.csv,然后我会使用@PostConstruct它从中获取资源:


import org.springframework.core.io.support.*


@Value("${app.users-location}")

private String usersLocation;

private Collection<Resource> csvResources;


@PostConstruct

public void init(){

    ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();   

    csvResources = 

    Arrays.asList(patternResolver.getResources("classpath*:/" + usersLocation));

}


查看完整回答
反对 回复 2023-05-17
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

好像当前版本不支持


查看完整回答
反对 回复 2023-05-17
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

解决方案是使用数组而不是列表:


@Value("${app.users-location}")

Resource[] resources;


@PostConstruct

public void init(){

    System.out.println(resources);

}

我检查了一下,真的有效!!!


查看完整回答
反对 回复 2023-05-17
  • 3 回答
  • 0 关注
  • 260 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信