【问题标题】:How can I expand wildcards in Spring properties?如何在 Spring 属性中扩展通配符?
【发布时间】:2019-12-13 20:32:26
【问题描述】:

我正在开发 Spring Boot 应用程序,我想注入这样的资源集合:

@Value("${app.users-location}")
Collection<Resource> csvResources;

在application.properties里面我写了以下内容:

app.users-location=/feed/*.csv

但它并没有按预期工作:

对于这种情况,我希望看到 Resource 类型的 5 个元素的集合。

我怎样才能实现它?

【问题讨论】:

  • 图片应该显示什么?我的网络阻止了 imgur。
  • 另外,Spring 没有也不能扩展通配符。您必须自动连接一个字符串并自己进行通配符扩展。
  • @Michael 它显示 src/main/resources 文件夹有 'feed' 文件夹并且该文件夹包含 5 个 csv 文件
  • @Michael,我知道我可以用手做任何事情,但我更喜欢让 spring 工作而不是我)
  • 在这种情况下,即使 Spring 可以扩展通配符,它​​也不正确。 /feed/*.csv 是绝对路径,您正在尝试使用相对路径。

标签: java spring spring-boot spring-io


【解决方案1】:

这是有效的:

@Value("app.users-location")
String foo; // inject "/feed/*.csv"

这也是有效的(source):

@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));
}

【讨论】:

  • 有点奇怪)
  • 现在不是测试它的时间/可能性,但很有趣。如果 if 可行并且使用其他解决方案更简单,请不要犹豫接受。
【解决方案2】:

以下是关于您的问题的讨论:

https://github.com/spring-projects/spring-boot/issues/12993

当前版本好像不支持

【讨论】:

    【解决方案3】:

    有昵称的人m.antkowicz - https://stackoverflow.com/users/4153426/m-antkowicz

    提供了正确答案,但随后将其删除。

    https://stackoverflow.com/a/57373605/2674303

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

    @Value("${app.users-location}")
    Resource[] resources;
    
    @PostConstruct
    public void init(){
        System.out.println(resources);
    }
    

    我检查了它,它确实有效!!!

    【讨论】:

    • @m.antkowicz,请看一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多