gpt4 book ai didi

Docker:无法从 Spring Boot 应用程序读取类路径资源

转载 作者:行者123 更新时间:2023-12-02 18:08:04 24 4
gpt4 key购买 nike

读取类路径资源,

    try {
final ClassPathResource classPathResource = new ClassPathResource(format("location%sGeoLite2-City.mmdb", File.separator));
final File database = classPathResource.getFile();
dbReader = new DatabaseReader.Builder(database).build();
} catch (Exception e) {
System.out.println("Exception: " + e);
}

我已经使用以下 Dockerfile 将它与 docker 打包在一起,
FROM java:8
ADD build/libs/*.jar App.jar
CMD java -jar App.jar

但是在以 docker run -p 8080:8080 app-image 运行此应用程序时,我可以访问应用程序端点,并且从应用程序日志中我可以看到它无法读取此文件(以下来自日志),
Exception: java.io.FileNotFoundException: class path resource [location/GeoLite2-City.mmdb] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/App.jar!/BOOT-INF/classes!/location/GeoLite2-City.mmdb

感谢任何评论,评论前要了解的事情,

**- 在 Windows 10、intellij 2018.2、jdk 8 上运行
- 可以使用 Intellij 和命令行成功运行应用程序
- jar 中存在文件(我确实提取了 jar 并检查了)
**

最佳答案

使用斜杠不是一个好方法。

无论系统操作系统如何,始终使用文件分隔符,因为它们可以正常工作。

改变

(location\\GeoLite2-City.mmdb)


("location"+ File.separator +"GeoLite2-City.mmdb")

有关更多信息,请参阅此内容。

https://www.journaldev.com/851/java-file-separator-separatorchar-pathseparator-pathseparatorchar

Difference between File.separator and slash in paths

关于Docker:无法从 Spring Boot 应用程序读取类路径资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929777/

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