我正在开发一个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.file
在 Dockerfile
中添加所需的文件。这会将 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/