首页 > Java > java教程 > 为什么我的 Spring Boot 应用程序在作为 JAR 运行时无法找到类路径资源?

为什么我的 Spring Boot 应用程序在作为 JAR 运行时无法找到类路径资源?

Patricia Arquette
发布: 2024-11-03 11:25:02
原创
269 人浏览过

Why Does My Spring Boot Application Fail to Find Classpath Resources When Run as a JAR?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板