作为 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中文网其他相关文章!