将spring启动应用程序部署为war文件时未找到资源异常

时间:2017-08-07 18:58:08

标签: java spring maven spring-boot

我有一个Spring Boot应用程序,它将在Cloud Foundry上部署为.war。它有许多属性文件保存在src/main/resources/文件夹中。该应用程序使用自定义库作为读取这些属性的依赖项。

例如:其中一个依赖项是自定义记录器库,它在运行时读取log.properties文件。现在大多数这些库使用ClassLoader.getSystemresource().getFile()函数来读取属性。由于它是依赖项,我无法编辑库。

通过STS进行测试时,一切都在本地工作。但是,当生成并部署.war文件时,它无法找到任何这些资源文件,因此会失败。所有属性文件都出现在.war中,如果我使用Spring的ClassPathResource()方法来访问文件,则可以访问它们。

我在Stack Overflow上看到过类似的问题,建议将文件作为流而不是文件和其他类似的解决方案来读取,但这些都不适用于我的情况,因为我无法修改依赖源代码。有没有办法实现这个目标?

我的问题与此问题Classpath resource not found when running as jar非常相似,只是我无法应用给出的解决方案。

修改

以下要求的是代码段

文件logfile = ClassLoader.getSystemResource(" log.properties")。getFile();

这不起作用。

文件logFile = new ClassPathResource(" log.properties")。getFile();.作品。但我需要第一个代码片段才能工作,因为它在jar中,我无法修改它。

1 个答案:

答案 0 :(得分:0)

我最后修改了一个小小的改变。出现此问题是因为ClassLoader.getSystemResource在System Classloader中查找文件,其中文件在war中被压缩。 我修改了

文件logfile = ClassLoader.getSystemResource(“log.properties”)。getFile();

File logfile = this.getClass()。getClassLoader()。getSystemResource(“log.properties”)。getFile();

它开始工作了。