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

标签 java spring spring-boot spring-io

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

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

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

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

但它没有按预期工作:

/src/main/resources containing a feed folder with 5 CSVs

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

我怎样才能实现它?

最佳答案

这是有效的:

@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*: 前缀一起使用。也许这是可能的...

无论如何,作为替代方案,我将注入(inject)此属性 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));
}

关于java - 如何在 Spring 属性中扩展通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57373478/

相关文章:

java - 如何获得正确的输入来获取 ArrayList 的索引?

java - 无法使用 Spring Framework SimpleJdbcInsert 插入到 Sql Server

java - 尝试在 hibernate/spring 中创建用户登录的东西

java - 如何在没有注释的情况下使用swagger

JAVA - 无效数据的自定义错误响应

java - Java 中的 short 和 char 类型

java - Android代码读取文件异常

Spring Boot : H2 database not saved to file

java - Spring Boot Rest 服务返回 HTTP-404

java - 将 Spring Boot JAR 应用程序转换为 WAR