更新:我仍然会将 Artem Bilan 的答案标记为正确,但我仍然觉得我需要为任何未来的读者指出这一点。看来我误解了@Value
注释的“默认值”的概念。我希望通过使用来实现的功能
@Value("${someProp:defaultFilePath}")
private Resource resourcefilePath;
就是这样,如果 application.properties 中定义的文件路径 someProp 抛出异常(即找不到文件),它将尝试使用 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
无论我尝试什么,我都会得到。
编辑:战争结构:
ProjectFolder -> META-INF -> maven -> etc..
-> org -> springframework -> boot -> etc..
-> WEB-INF -> classes -> com
-> public
-> application.properties
-> privateKey.txt