указать файлы в папке ресурсов в файле spring application.properties

У меня есть приложение Spring Boot, код должен получить доступ к файлу в папке ресурсов. вот мой файл application.properties:

cert.file=classpath:/resources/cert.p12

однако он всегда жаловался:

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

Я дважды проверил папку my_project/target/classes, чтобы убедиться, что файл cert.p12 находится там.

и в коде я пытался получить доступ к файлу:

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

что такое этот путь к классам? и почему он не может найти файл? Спасибо!


person user468587    schedule 28.08.2015    source источник
comment
вам удалось это решить?   -  person David Krenkel    schedule 18.10.2017
comment
есть ли решение для этого?   -  person Vishal    schedule 25.04.2018


Ответы (5)


Путь к классам включает в себя то, что у вас есть внутри вашего каталога ресурсов.

Пытаться:

cert.file=classpath:cert.p12

Я предполагаю, что у вас есть стандартная структура каталога maven.

person raduy    schedule 29.08.2015
comment
выдала ту же ошибку: FileNotFoundException: classpath:cert_key.p12. Я использую стандартную структуру maven - person user468587; 31.08.2015

Этот синтаксис не работает с обычным 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
person Domo    schedule 11.12.2017
comment
когда я запускаю приложение с java -jar, этот код не работает. - person amir110; 31.03.2020

Вы можете просто использовать 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

местоположение ресурсов

person BeeNoisy    schedule 09.11.2016

как сказал @BeeNoisy, вы должны использовать getResourceAsSreame(...) вместо getResource(...).getFile().

я вижу именно вашу проблему, и мой код работал на моем компьютере правильно, но когда я загружаю приложение со встроенным котом с помощью команды java -jar, я вижу эту ошибку:

поэтому я меняю такой код и устраняю ошибку:

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
person amir110    schedule 31.03.2020

Этот путь работал для меня cert.file=./build/resources/main/cert.p12

person fjkjava    schedule 08.11.2016