无法在 Docker env 中使用 spring ResourceUtils 或 DefaultResourceLoader 获取类路径资源

Can't get classpath resource with spring ResourceUtils or DefaultResourceLoader in Docker env

我正在开发一个 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 引导应用程序 属性 而不是环境变量。然后在容器中设置一个与 属性 同名的环境变量。 Spring 默认情况下,引导应该获取变量。

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

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