2017-08-07 22 views
0

我有一個Spring Boot應用程序,它將在Cloud Foundry上部署爲.war。它有很多屬性文件保存在src/main/resources/文件夾中。應用程序使用自定義庫作爲讀取這些屬性的依賴項。在將彈簧引導應用程序部署爲war文件時未發現資源異常

例如:其中一個依賴項是自定義記錄器庫,它在運行時讀取log.properties文件。現在大多數這些庫都使用ClassLoader.getSystemresource().getFile()函數來讀取屬性。由於它是依賴項,我無法編輯這些庫。

通過STS進行測試時,一切都在本地工作。但是當生成並部署.war文件時,它無法找到任何這些資源文件,因此失敗。所有屬性文件都存在於.war中,如果我使用Spring的ClassPathResource()方法來訪問這些文件,則它是可訪問的。

我看到了堆棧溢出的類似問題,建議讀取文件作爲流而不是文件和其他類似的解決方案,但這些都不會在我的情況下工作,因爲我將無法修改依賴項源代碼。有什麼辦法可以做到這一點?

我的問題是非常類似於這個問題Classpath resource not found when running as jar除了我不能應用給出的解決方案。

編輯

如以下請求是代碼片段

文件日誌文件= ClassLoader.getSystemResource( 「log.properties」)的GetFile();

這不起作用。

File logFile = new ClassPathResource(「log.properties」)。getFile();.作品。但我需要第一個代碼片段才能工作,因爲它在一個jar中,我無法修改它。

+0

發佈代碼以加載資源將非常有用 –

+0

同意,請發佈代碼片段,我們需要確切地瞭解它是如何嘗試從類路徑訪問文件的。 – Ben

+0

如果可能的話,將文件添加到啓動程序classpath的類路徑中。我不知道Cloud Foundry,但在Tomcat中 - 當tomcat啓動並將文件放入文件夾後,我可以將外部文件夾添加到classpath中,然後它應該工作。這是因爲getSystemResource在System Classloader中查找文件 – Hima

回答

0

我最終修改了一個小的變化罐子。發生此問題的原因是ClassLoader.getSystemResource在System Classloader中查找文件在戰爭中壓縮的文件。 我修改了

File logfile = ClassLoader.getSystemResource(「log.properties」)。getFile(); 。

文件日誌文件= this.getClass()getClassLoader()getSystemResource( 「log.properties」)的GetFile();

它開始工作。

相關問題