You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中Spring Boot应用读取资源文件失败求助

问题分析与解决方案

核心问题

运行容器时抛出FileNotFoundException,找不到src\main\resources\anaplan-connector-393817-7f22b1ca301b.json文件,根源有两点:

  1. Spring Boot打包成Jar后,src/main/resources下的文件会被放入Jar包根目录,而非保留原src路径结构,直接用File类读取原路径必然失败
  2. 容器是Linux环境,Windows路径分隔符\无法识别,且Jar包属于压缩文件,不能通过普通文件系统路径访问内部资源

具体解决步骤

1. 修改代码的资源读取方式

替换原FileReader读取逻辑,改用Spring Boot推荐的类加载器读取Jar内资源:

// 原错误代码
// FileReader reader = new FileReader("src\\main\\resources\\anaplan-connector-393817-7f22b1ca301b.json");

// 修改后的代码
InputStream inputStream = ClientAppApplication.class.getResourceAsStream("/anaplan-connector-393817-7f22b1ca301b.json");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

这种方式既兼容IDE运行环境,也支持Jar包运行场景。

2. 确认构建工具打包时包含资源文件

检查Maven/Gradle配置,确保src/main/resources下的.json文件被打包进Jar:

  • Maven(pom.xml):确保资源配置正确(默认已包含,若有自定义配置需检查)
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.json</include>
            </includes>
        </resource>
    </resources>
</build>
  • Gradle(build.gradle):
sourceSets {
    main {
        resources {
            include '**/*.json'
        }
    }
}

3. 优化Dockerfile(可选但推荐)

当前Dockerfile中ADD . .会复制整个项目文件到容器,冗余且没必要,只需复制构建好的Jar包即可:

FROM openjdk:11
EXPOSE 8080
WORKDIR /usr/local/bin/ClientApp
# 仅复制Jar包到容器
COPY target/ClientApp-0.0.1-SNAPSHOT.jar ./ClientApp.jar
ENTRYPOINT ["java", "-jar", "ClientApp.jar"]

4. 验证Jar包内容(排查用)

若修改后仍报错,可先验证Jar包内是否包含目标文件:

# 本地执行,检查Jar包内是否有目标json
jar tf target/ClientApp-0.0.1-SNAPSHOT.jar | grep anaplan-connector

若输出中能看到该文件,说明打包正常,问题仍在代码读取逻辑;若看不到,需调整构建工具配置。


内容的提问来源于stack exchange,提问作者Error404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:10:57