在spring application.properties文件中指定resources文件夹中的文件

时间:2015-08-28 19:08:22

标签: spring-boot

我有一个Spring Boot应用程序,该代码需要访问resources文件夹下的文件。这是我的application.properties文件:

cert.file=classpath:/resources/cert.p12
然而,它总是抱怨:

java.io.FileNotFoundException: classpath:/resources/cert.p12 (No such file or directory)

我仔细检查了文件夹 MY_PROJECT /目标/类 确保文件cert.p12退出。

并在代码中尝试访问该文件:

@Value("${cert.file}")
private String certFile;
....
@Bean
public Sender sender() {
    return new Sender(certFile);
}

这个类路径究竟是什么?为什么它找不到文件?谢谢!

5 个答案:

答案 0 :(得分:6)

Classpath包含内部您的资源目录。

尝试:

cert.file=classpath:cert.p12

我假设你有标准的maven目录结构。

答案 1 :(得分:2)

此语法不适用于普通的FileInputStream。请改用Spring Resourceloader。

@Autowired
private ResourceLoader resourceLoader;

@Value("${property.name}")
private String property;

File getPropertyFile(){
    return resourceLoader.getResource(property).getFile();
}

application.properties

property.name=classpath:filename.txt

答案 2 :(得分:0)

您可以使用XXX.class.getResourceAsStream("filename")获取资源。 如:

ObjectInputStream ois = new ObjectInputStream(MyClass.class.getResourceAsStream(PUBLIC_KEY_FILE));
        Key key = (Key) ois.readObject();
        ois.close();

而且,这在我的代码中起作用.MyClass是使用你的crt文件的类。我的PUBLIC_KEY_FILE"/rsa/PublicKey",只存储在src/main/resources/rsa文件夹

resources location

答案 3 :(得分:0)

正如@BeeNoisy所说,您应该使用getResourceAsSreame(...)而不是getResource(...).getFile()

我确切地看到了您的问题,并且我的代码正确地在计算机上运行,​​但是当我使用java -jar命令加载带有嵌入式tomcat的应用程序时,我看到此错误:

所以我更改了这样的代码并解决了错误:

private final String licencePass;
private final String licenceName;

public ProcessFormController(@Value("${ramona.licence.keystore.fullname}") String licenceName,
                             @Value("${ramona.licence.pass}") String licencePass) throws Exception {
    this.licenceName = licenceName;
    this.licencePass = licencePass;
    this.restTemplate = new RestTemplate(getHttpsRequestFactory());
}

private ClientHttpRequestFactory getHttpsRequestFactory() throws Exception {
    logger.info("licenceName:" + licenceName);
    final InputStream resourceAsStream =
            getClass().getClassLoader().getResourceAsStream(
                    licenceName
            );
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(resourceAsStream, licencePass.toCharArray());
    ...
}

属性:

ramona.licence.keystore.fullname=key.p12

答案 4 :(得分:-1)

这条路对我有用 cert.file =。/建造/资源/主/ cert.p12