我正在开发 Spring Boot 应用程序,我想注入(inject)这样的资源集合:
@Value("${app.users-location}")
Collection<Resource> csvResources;
在application.properties
里面我写了以下内容:
app.users-location=/feed/*.csv
但它没有按预期工作:
对于这种情况,我希望看到 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/