我有一個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中,我無法修改它。
發佈代碼以加載資源將非常有用 –
同意,請發佈代碼片段,我們需要確切地瞭解它是如何嘗試從類路徑訪問文件的。 – Ben
如果可能的話,將文件添加到啓動程序classpath的類路徑中。我不知道Cloud Foundry,但在Tomcat中 - 當tomcat啓動並將文件放入文件夾後,我可以將外部文件夾添加到classpath中,然後它應該工作。這是因爲getSystemResource在System Classloader中查找文件 – Hima