如何在Spring中从classpath注入资源?

时间:2015-02-17 14:23:35

标签: java spring

我想从src/main/resources注入一个像这样的文件:

@Value("classpath:myfile.txt")
private Resource res;

当我从eclipse运行它时它工作正常。 但是从独立文件夹中找不到该文件:

Caused by: java.io.FileNotFoundException: class path resource [myfile.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/myapp/myapp-1.0.0.jar!/myfile.txt
    at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:212) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE]

如何告诉spring要注入的文件实际上是在jar的根目录中,而不是绝对路径?

如果我尝试以编程方式加载它,结果相同。

res = new ClassPathResource("myfile.txt");

2 个答案:

答案 0 :(得分:1)

你说这适用于日食:

@Value("classpath:myfile.txt")
private Resource res;

现在在eclipse中尝试这个(注意*),如果它有效,独立应该没问题:

@Value("classpath*:myfile.txt")
private Resource res;

在部署外部eclipse时,请确保myfile.txt在类路径上;最佳位置位于Java类文件包所在的根目录中(comorg

答案 1 :(得分:1)

事实证明注射本身确实有效,但是我使用res.getFile()访问了NPE文件。

当只检索URL并使用File file = ResourceUtils.getFile(res.getURL().getFile());显式提取文件时,它按预期工作。

虽然我不确定这是一个错误还是按预期工作。