1

更新:我仍然會保留Artem Bilan的答案標記爲正確,但我仍然覺得我需要爲未來的讀者指出這一點。看來我誤解了@Value註釋的「默認值」的概念。通過使用春季ClassPathResource - 無法打開,因爲它不存在

@Value("${someProp:defaultFilePath}") 
private Resource resourcefilePath; 

我希望能實現的功能是,應在application.properties定義的文件路徑someProp拋出一個異常(即文件未找到),它會再嘗試使用defaultFilePath(即一個以上)。實際上定義默認值的是,如果屬性本身(someProp)在application.properties文件中不存在(未定義或註釋掉),則它會嘗試使用默認值。


我使用Spring Integration Sftp進行SSH文件傳輸。使用Spring Boot,所以沒有XML文件。在配置DefaultSftpSessionFactory對象之前,我定義了一個資源,其中包含一個.txt文件,該文件具有sFtp身份驗證所需的專用密鑰。

以前,我用FileSystemResource這樣的:

Resource resource = new FileSystemResource("C:/absolute/path/to/my/private/key/privateKey.txt"); 

這工作就好了。但是,這個應用程序最終會被放置在雲環境中,這意味着這樣的絕對路徑將不再起作用。我試圖改爲使用ClassPathResource,但它不工作,不管我嘗試什麼。到目前爲止,我已經試過如下:

Resource resource = new ClassPathResource("privateKey.txt"); 
Resource resource = new ClassPathResource("privateKey.txt", SomeClassInClassPath.class); 
Resource resource = new ClassPathResource("com/my/package/name/privateKey.txt"); 

我的目錄結構看起來是這樣的:

ProjectFolder -> src -> main -> java -> com -> my -> package -> name -> various java classes 
                     privateKey.txt 
          -> resources -> etc... 

還有更精彩的,但是這是它的一個簡化版本。任何人都可以幫助弄清楚如何讓它識別我的.txt的路徑?無論我嘗試什麼,我都會收到java.io.FileNotFoundException: class path resource [resource] cannot be opened because it does not exist

編輯: WAR結構:

ProjectFolder -> META-INF -> maven -> etc.. 
       -> org -> springframework -> boot -> etc.. 
       -> WEB-INF -> classes -> com 
            -> public 
            -> application.properties 
            -> privateKey.txt 
+0

您是否嘗試過的「資源」目錄下移動你的「privateKey.txt」? 'resources - > com - > my - > package - > name - > privateKey.txt' – dnault

+0

1.請檢查您的最終war/jar文件在類路徑中是否包含'privateKey.txt'。 2您可以使用'@Value(「classpath:privateKey.txt」)Resource privateKey'構造。 –

回答

2

你告訴src -> main ->等等,但是這不要緊,運行時間。

如果你真的要在最終的應用程序(jar?war?)中擁有該文件,請確保你將該文件打包爲最終應用程序的一部分。

並在此共享該結構。

With Spring Java &註解配置你不需要擔心ClassPathResource對象。有剛好夠在適當的@Configuration聲明它是這樣的:

@Value("com/my/package/name/privateKey.txt") 
private Resource privateKey; 
+0

我更新了我的問題以顯示WAR結構。看起來,即使我將privateKey.txt放在我的類路徑(com/my/package/name/privateKey.txt)中後,它最終被放置在WAR中的classes文件夾中。任何想法我將如何參考該路徑? – bscott

+0

'@Value(「WEB-INF/classes/com/my/package/name/privateKey.txt」)'? –

+0

進入演播室的工作代碼! –

相關問題