使用Docker env中的Spring ResourceUtils或DefaultResourceLoader无法获取classpath资源

时间:2017-05-11 04:01:36

标签: java spring docker spring-boot classpath

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

@Autowired
private Enviroment env;



 String fileLocation = ResourceUtils.getFile(env.getProperty("common.cert-location")).getAbsolutePath();

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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