gpt4 book ai didi

java - Spring ClassPathResource - 无法打开,因为它不存在

转载 作者:行者123 更新时间:2023-11-30 02:55:58 25 4
gpt4 key购买 nike

更新:我仍然会将 Artem Bilan 的答案标记为正确,但我仍然觉得我需要向 future 的读者指出这一点。看来我误解了 @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:无法打开类路径资源[资源],因为它不存在

编辑: war 结构:

ProjectFolder -> META-INF -> maven -> etc..
-> org -> springframework -> boot -> etc..
-> WEB-INF -> classes -> com
-> public
-> application.properties
-> privateKey.txt

最佳答案

您显示 src -> main -> 等,但这对于运行时并不重要。

如果您确实要在最终应用程序中包含该文件(jar?war?),请确保将该文件真正打包为最终应用程序的一部分。

并在此处分享该结构。

使用 Spring Java 和注释配置,您无需担心 ClassPathResource 对象。在适当的 @Configuration 中声明它就足够了:

@Value("com/my/package/name/privateKey.txt")
private Resource privateKey;

关于java - Spring ClassPathResource - 无法打开,因为它不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37198095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com