java - 无法在 Docker 环境中使用 Spring ResourceUtils 或 DefaultResourceLoader 获取类路径资源

标签 java spring docker spring-boot classpath

我正在开发一个spring-boot web应用程序,我需要获取一些类路径资源,所以我使用下面的方法:

@Autowired
private Enviroment env;



 String fileLocation = ResourceUtils.getFile(env.getProperty("common.cert-location")).getAbsolutePath();
<小时/>

String fileLocation = new DefaultResourceLoader().getResource("filename").getFile().getPath();

它们都在本地环境中正常运行,但是当我打包应用程序并在 Docker 镜像中运行它时,它会抛出异常。我怎样才能获得资源?谢谢!

最佳答案

如果我理解正确,您会尝试从文件系统加载文件。文件位置是使用环境变量传入的。

如果正确,您可以使用 ADD myresource.file/myresource.fileDockerfile 中添加所需的文件。这会将 myresource.file 放入容器的根目录中。

现在,如果您运行容器,则可以使用 docker run -e common.cert-location=/myresource.file 传递环境变量 common.cert-location

一个补充:您可以添加 Spring Boot 应用程序属性而不是环境变量。然后设置一个与容器中的属性同名的环境变量。 Spring Boot 应该默认选择该变量。

您还可以使用env_file,而不是使用-e参数让容器知道变量。这允许您将所有环境变量放入一个文件中并将它们推送到容器中。

与 Spring Boot 应用程序属性结合使用,您可以使用单个文件中定义的环境变量覆盖所有应用程序属性。我认为这是在容器内配置启动应用程序的一种很好的、​​一致的方式。

关于java - 无法在 Docker 环境中使用 Spring ResourceUtils 或 DefaultResourceLoader 获取类路径资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906309/

相关文章:

java - 添加 Openfeign 依赖时出现 java.lang.IllegalStateException

java - x509认证失败时重定向循环

docker - 错误 : Invalid argument: ./wait-for-it.sh

linux - docker中最合适的mongodb Version 4?

java - 如何在给定时间内重定向到 Struts 中的另一个操作?

java - 是否可以防止通过 Hibernate 读取数据库行?

java - Spring JPA存储库,选择包含参数列表中所有元素的数据

docker - 错误状态终止的Kubernetes Pod终止

java - 当 quartz 作业触发时,它是一个新的作业类实例吗?

java - 数组的初始化