更新:我仍然會保留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
您是否嘗試過的「資源」目錄下移動你的「privateKey.txt」? 'resources - > com - > my - > package - > name - > privateKey.txt' – dnault
1.請檢查您的最終war/jar文件在類路徑中是否包含'privateKey.txt'。 2您可以使用'@Value(「classpath:privateKey.txt」)Resource privateKey'構造。 –