Spring Boot + Docker:实现可挂载可热更新的 config.json
文章目录一、背景为什么 jar 内的 config.json 不能被覆盖二、Spring Boot 静态资源加载机制三、解决方案结构四、核心实现优先读外部文件五、完整 Dockerfile 示例八、总结前言在实际项目中我们经常需要让前端读取一个config.json并且希望它支持在 Docker 容器里挂载覆盖、实时生效避免每次修改都要重新打包。一、背景为什么 jar 内的 config.json 不能被覆盖很多人遇到这样的场景前端请求GET /config.json想通过 Docker 挂载一份外部config.json到容器里覆盖 jar 里的那份结果发现改了也不生效 → 还是读到打包进 jar 的老版本 根本原因Spring Boot 不会自动替换 jar 内部的静态资源文件挂载的静态资源只是在查找路径里排在前面而已。换句话说文件如果在 jar 里通过 classpath 加载的优先级并不因为挂载而被覆盖实际查找路径可能不同。二、Spring Boot 静态资源加载机制在 Spring Boot 里静态资源是这样被查找的# Spring Boot 2.4 使用这个 spring.web.resources.static-locationsfile:/app/static/, classpath:/static/ # Spring Boot 2.3- 使用这个 spring.resources.static-locationsfile:/app/static/, classpath:/static/这个配置表示优先级资源位置第一外部目录 file:/app/static/第二jar 内 classpath:/static/注意这是查找顺序不是覆盖机制。三、解决方案结构为了做到✔ Docker 容器挂载的 config.json 可覆盖✔ 修改后立即生效无重启无缓存✔ 支持/config.json和/wvp/config.json两种访问路径我们的整体方案是前端请求 /config.json 或 /wvp/config.json → 后端 Controller 先尝试读取 容器内 /app/config/config.json → 如果存在直接返回 → 如果不存在再 fallback 到 classpath:/static/config.json同时设置返回头Cache-Control: no-store避免浏览器缓存旧配置。四、核心实现优先读外部文件在你的 Controller 里写如下逻辑RestControllerpublicclassWvpIndexController{privatestaticfinalStringEXTERNAL_PATH/app/config/config.json;privatestaticfinalStringCLASSPATH_PATHclasspath:/static/config.json;GetMapping({/config.json,/wvp/config.json})publicResponseEntityResourcegetConfig(HttpServletResponseresponse){Resourceresource;// 1) 优先尝试读取外部挂载文件FileexternalnewFile(EXTERNAL_PATH);if(external.exists()external.isFile()){resourcenewFileSystemResource(external);}else{// 2) 不存在则 fallback 到内置 classpathresourcenewClassPathResource(static/config.json);}// 设置不缓存response.setHeader(Cache-Control,no-store);returnResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(resource);}}五、完整 Dockerfile 示例FROM openjdk:17-jdk-alpine WORKDIR /app COPY wvp.jar /app/wvp.jar COPY static /app/static # 静态资源 fallback EXPOSE 8080 ENTRYPOINT [java, \ -Dspring.web.resources.static-locationsfile:/app/static/,classpath:/static/, \ -Dspring.resources.static-locationsfile:/app/static/,classpath:/static/, \ -jar, wvp.jar]八、总结方案是否可挂载覆盖是否热更新是否兼容多个路径只依赖 Spring Boot 静态资源❌❌❌加上后端优先逻辑✅✅✅✨ 推荐方案后端优先读取外部挂载文件 fallback classpath no-cache这样你只要docker-composeup -d然后在宿主机改config.json前端刷新立即生效

相关新闻

高通SEE架构深度解析(3): 核心组件从功能模块到安全体系

高通SEE架构深度解析(3): 核心组件从功能模块到安全体系

高通SEE(Sensors Execution Environment/Secure Execution Environment)架构作为传感器管理与安全处理的核心框架,其组件设计围绕“高效调度”与“安全隔离”两大核心目标展开。结合高通官方文档、平台实现(如SDM845)及…

2026/7/4 12:00:22 阅读更多 →
高通SEE架构深度解析(1): 架构原理与核心组件

高通SEE架构深度解析(1): 架构原理与核心组件

系列前言 随着智能设备与物联网的迅猛发展,传感器作为数据采集的“第一入口”,其管理效率、数据安全性与硬件协同能力已成为影响设备体验的关键因素。高通推出的 SEE(Sensors Execution Environment)架构,从高通SDM845…

2026/7/4 16:32:08 阅读更多 →
趣味项目与综合实战

趣味项目与综合实战

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。 目录 安装SQLAlchemy 核心概念 连接数据库 定义数据模型 创建数据库表 基本CRUD操作…

2026/7/3 15:33:13 阅读更多 →

最新新闻

基于YOLOv8的番茄叶片病变识别系统设计与实现

基于YOLOv8的番茄叶片病变识别系统设计与实现

1. 项目概述这个基于YOLOv8的番茄叶片病变识别系统是我在毕业设计期间完成的一个实用项目。作为一名计算机视觉方向的毕业生,我选择将深度学习技术应用于农业领域,解决传统病害检测方法效率低下的问题。系统能够自动识别番茄叶片上的多种常见病害&#x…

2026/7/4 17:08:57 阅读更多 →
Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持

Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持

Transformers.js终极指南:如何在浏览器中运行AI模型而无需服务器支持 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https…

2026/7/4 17:08:57 阅读更多 →
QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程

QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程

QRazyBox终极指南:5分钟学会修复损坏二维码的完整教程 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过这样的烦恼?重要的二维码因为打印模糊、表面划痕或图…

2026/7/4 17:06:57 阅读更多 →
如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南

如何在Windows和Linux上获得完整的AirPods体验:免费开源工具终极指南 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop …

2026/7/4 17:04:56 阅读更多 →
FanControl如何解决现代PC散热控制的技术挑战?

FanControl如何解决现代PC散热控制的技术挑战?

FanControl如何解决现代PC散热控制的技术挑战? 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCon…

2026/7/4 17:04:56 阅读更多 →
Web自动化测试全流程解析:从Selenium基础到CI/CD集成实战

Web自动化测试全流程解析:从Selenium基础到CI/CD集成实战

1. 项目概述:为什么我们需要Web自动化测试?在软件开发,尤其是Web应用开发的日常工作中,测试是一个绕不开的环节。想象一下,你刚刚完成了一个新功能的开发,比如一个复杂的用户注册表单。你需要验证它在Chrom…

2026/7/4 17:02:56 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻