UPDATE: Я все же буду отмечать ответ Артема Билана как правильный, но я все еще чувствовал, что мне нужно указать на это для будущих читателей. Кажется, я неправильно понял концепцию «значения по умолчанию» для аннотации @Value
. Функциональность я надеялся достичь с помощьюSpring ClassPathResource - невозможно открыть, потому что его не существует
@Value("${someProp:defaultFilePath}")
private Resource resourcefilePath;
было то, что следует путь к файлу someProp определено в 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
Вы пробовали двигая «privateKey.txt» в директории «ресурсы»? 'resources -> com -> my -> package -> name -> privateKey.txt' – dnault
1. Убедитесь, что ваш последний файл войны/jar содержит« privateKey.txt »в пути к классу. 2 Вы можете использовать '@Value (" classpath: privateKey.txt ") ресурс privateKey'. –