ОБНОВЛЕНИЕ: я по-прежнему оставлю ответ Артема Билана помеченным как правильный, но я все еще чувствовал, что должен указать на это будущим читателям. Кажется, я неправильно понял концепцию «значения по умолчанию» для аннотации @Value
. Функциональность, которую я надеялся достичь с помощью
@Value("${someProp:defaultFilePath}")
private Resource resourcefilePath;
заключалась в том, что если путь к файлу, определенный в application.properties, выдает исключение (т. е. файл не найден), он попытается использовать defaultFilePath (т. е. указанный выше). На самом деле определение значения по умолчанию заключается в том, что если само свойство (someProp) не существует (не определено или не закомментировано) в файле application.properties, оно пытается вместо этого использовать значение по умолчанию.
Я использую Spring Integration Sftp для передачи файлов SSH. Использование Spring Boot, поэтому нет файлов xml. Перед настройкой объекта DefaultSftpSessionFactory
я определяю ресурс, который содержит файл .txt с закрытым ключом, необходимым для аутентификации sFtp.
Раньше я использовал FileSystemResource
вот так:
Resource resource = new FileSystemResource("C:/absolute/path/to/my/private/key/privateKey.txt");
Это сработало просто отлично. Однако это приложение в конечном итоге будет помещено в облачную среду, а это означает, что такие абсолютные пути больше не будут работать. Вместо этого я пытаюсь использовать ClassPathResource, но он не работает, что бы я ни пытался. До сих пор я пробовал следующее:
Resource resource = new ClassPathResource("privateKey.txt");
Resource resource = new ClassPathResource("privateKey.txt", SomeClassInClassPath.class);
Resource resource = new ClassPathResource("com/my/package/name/privateKey.txt");
Моя структура каталогов выглядит примерно так:
ProjectFolder -> src -> main -> java -> com -> my -> package -> name -> various java classes
privateKey.txt
-> resources -> etc...
Есть еще, но это упрощенная версия. Может ли кто-нибудь помочь понять, как я могу заставить его распознать путь к моему .txt? Я продолжаю получать java.io.FileNotFoundException: class path resource [resource] cannot be opened because it does not exist
независимо от того, что я пытаюсь.
EDIT: структура WAR:
ProjectFolder -> META-INF -> maven -> etc..
-> org -> springframework -> boot -> etc..
-> WEB-INF -> classes -> com
-> public
-> application.properties
-> privateKey.txt
resources -> com -> my -> package -> name -> privateKey.txt
- person dnault   schedule 13.05.2016@Value("classpath:privateKey.txt") Resource privateKey
. - person Boris Treukhov   schedule 13.05.2016