您好我想在春天使用@PropertySource获取自定义资源,例如xyz://path/x.txt而不是类似路径文件等标准协议,它已经支持了。我找到了一种方法来做与SpringApplication相同的Spring引导,如下所示,自定义ResourceLoader
protected WebApplicationContext run(SpringApplication app){
app.setResourceLoader(new MyCustomResourceLoader);
return (WebApplicationContext )app.run();
}
同样有效,现在我可以像@PropertySource一样定义propertySource(“xyz://path/y.txt”)。但我无法弄清楚如何在普通的spring应用程序中覆盖/自定义相同的内容虽然尝试使用ResourceLoaderAware和BeanPostProcessor,但无法解决这个问题。
任何帮助..
更新 我将在我的自定义ResourceLoader
中进行操作public Class CustomResourceLoader extends DefaultResourceLoader{
@Override
public Resource getResource(String location){
if(location.startsWith("xyz://"){
return new XYZResource(new URI(location));
}
return super.getResource(location);
}
现在我只需要一种方法告诉spring使用它而不是defaultresourceloader,正如我在SPring启动中提到的那样,但是需要弄清楚如何在纯Spring中实现它。
答案 0 :(得分:1)
查看ConfigurableEnvironment
,您将在那里找到注册和订购自定义PropertySource
个实例的一流支持:
答案 1 :(得分:0)
感谢@ chris-beam,他给出了一个解决方法。总而言之,需要进行以下更改:
使用您的自定义资源加载器扩展AnnotationConfigWebApplicationContext并覆盖其getResource方法,如下所示
@Override
public Resource getResource(String location)
{
ResourceLoader loader = SingletongINSTANCE.getCustomResourceLoader();
return loader.getResource(location);
}
这可以通过在web.xml中使用自定义AnnotationConfigWebApplicationContext条目或通过WebApplicationInitializer来完成。
另外,为了更方便地支持自定义资源加载器https://jira.spring.io/browse/SPR-13905