我有一个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中,我无法修改它。
答案 0 :(得分:0)
我最后修改了一个小小的改变。出现此问题是因为ClassLoader.getSystemResource在System Classloader中查找文件,其中文件在war中被压缩。 我修改了
文件logfile = ClassLoader.getSystemResource(“log.properties”)。getFile();
到
File logfile = this.getClass()。getClassLoader()。getSystemResource(“log.properties”)。getFile();
它开始工作了。