作為JAR 運行時找不到類路徑資源
在Spring 中使用@Value 註解加載類路徑資源時可能會遇到此問題啟動應用程式。雖然從 STS 等 IDE 運行時它可以正常運行,但運行透過 mvn 套件產生的 jar 檔案會導致 FileNotFoundException。
解決問題
根本原因是該資源.getFile() 期望資源在檔案系統上直接可用。但是,當作為 JAR 運作時,資源會打包在檔案中,導致該方法無效。
解決方案
要解決此問題,請將 getFile() 替換為 getInputStream ()。此方法可讓您存取資源的內容,無論其位置為何。這是修改後的程式碼:
<code class="java">@Configuration @ComponentScan @EnableAutoConfiguration public class Application implements CommandLineRunner { private static final Logger logger = Logger.getLogger(Application.class); @Value("${message.file}") private Resource messageResource; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... arg0) throws Exception { // both of these work when running as Spring boot app from STS, but // fail after mvn package, and then running as java -jar testResource(new ClassPathResource("message.txt")); testResource(this.messageResource); } private void testResource(Resource resource) { try { InputStream inputStream = resource.getInputStream(); logger.debug("Found the resource " + resource.getFilename()); } catch (IOException ex) { logger.error(ex.toString()); } } }</code>
以上是為什麼我的 Spring Boot 應用程式在作為 JAR 運行時無法找到類路徑資源?的詳細內容。更多資訊請關注PHP中文網其他相關文章!