最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringBoot+Docker實現(xiàn)可掛載可熱更新的config.json

 更新時間:2026年02月03日 09:30:02   作者:Knight_AL  
在實際項目中,我們經(jīng)常需要讓前端讀取一個?config.json,并且希望它?支持在?Docker?容器里掛載覆蓋、實時生效,避免每次修改都要重新打包,所以本文給大家介紹了如何基于SpringBoot+Docker實現(xiàn)可掛載可熱更新的config.json,需要的朋友可以參考下

一、背景:為什么 jar 內(nèi)的 config.json 不能被覆蓋?

很多人遇到這樣的場景:

  • 前端請求 GET /config.json
  • 想通過 Docker 掛載一份外部 config.json 到容器里覆蓋 jar 里的那份
  • 結(jié)果發(fā)現(xiàn)改了也不生效 → 還是讀到打包進 jar 的老版本

根本原因:

Spring Boot 不會自動替換 jar 內(nèi)部的靜態(tài)資源文件,掛載的靜態(tài)資源只是在查找路徑里排在前面而已。

換句話說:

文件如果在 jar 里,通過 classpath 加載的優(yōu)先級并不因為掛載而被覆蓋(實際查找路徑可能不同)。

二、Spring Boot 靜態(tài)資源加載機制

在 Spring Boot 里,靜態(tài)資源是這樣被查找的:

# Spring Boot 2.4+ 使用這個
spring.web.resources.static-locations=file:/app/static/, classpath:/static/

# Spring Boot 2.3- 使用這個
spring.resources.static-locations=file:/app/static/, classpath:/static/

這個配置表示:

優(yōu)先級資源位置
第一外部目錄 file:/app/static/
第二jar 內(nèi) classpath:/static/

注意:這是查找順序,不是覆蓋機制。

三、解決方案結(jié)構(gòu)

為了做到:

? Docker 容器掛載的 config.json 可覆蓋
? 修改后立即生效(無重啟,無緩存)
? 支持 /config.json/wvp/config.json 兩種訪問路徑

我們的整體方案是:

前端請求 /config.json 或 /wvp/config.json
→ 后端 Controller 先嘗試讀取 容器內(nèi) /app/config/config.json
→ 如果存在直接返回
→ 如果不存在再 fallback 到 classpath:/static/config.json

同時設(shè)置返回頭 Cache-Control: no-store 避免瀏覽器緩存舊配置。

四、核心實現(xiàn):優(yōu)先讀外部文件

在你的 Controller 里寫如下邏輯:

@RestController
public class WvpIndexController {

    private static final String EXTERNAL_PATH = "/app/config/config.json";
    private static final String CLASSPATH_PATH = "classpath:/static/config.json";

    @GetMapping({"/config.json", "/wvp/config.json"})
    public ResponseEntity<Resource> getConfig(HttpServletResponse response) {

        Resource resource;

        // 1) 優(yōu)先嘗試讀取外部掛載文件
        File external = new File(EXTERNAL_PATH);
        if (external.exists() && external.isFile()) {
            resource = new FileSystemResource(external);
        } else {
            // 2) 不存在則 fallback 到內(nèi)置 classpath
            resource = new ClassPathResource("static/config.json");
        }

        // 設(shè)置不緩存
        response.setHeader("Cache-Control", "no-store");

        return ResponseEntity.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  # 靜態(tài)資源 fallback

EXPOSE 8080

ENTRYPOINT ["java", \
  "-Dspring.web.resources.static-locations=file:/app/static/,classpath:/static/", \
  "-Dspring.resources.static-locations=file:/app/static/,classpath:/static/", \
  "-jar", "wvp.jar"]

六、總結(jié)

方案是否可掛載覆蓋是否熱更新是否兼容多個路徑
只依賴 Spring Boot 靜態(tài)資源???
加上后端優(yōu)先邏輯???

推薦方案:后端優(yōu)先讀取外部掛載文件 + fallback classpath + no-cache

這樣你只要:

docker-compose up -d

然后在宿主機改 config.json,前端刷新立即生效。

以上就是基于SpringBoot+Docker實現(xiàn)可掛載可熱更新的config.json的詳細內(nèi)容,更多關(guān)于SpringBoot Docker可掛載可熱更新config.json的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA中@Autowired自動注入MyBatis?Mapper報紅警告的幾種解決方法

    IDEA中@Autowired自動注入MyBatis?Mapper報紅警告的幾種解決方法

    這篇文章主要介紹了IDEA中@Autowired自動注入MyBatis?Mapper報紅警告的幾種解決方法
    2024-02-02
  • Spring深入分析容器接口作用

    Spring深入分析容器接口作用

    Spring內(nèi)部提供了很多表示Spring容器的接口和對象,我們今天來看看幾個比較常見的容器接口和具體的實現(xiàn)類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Spring 中使用Quartz實現(xiàn)任務(wù)調(diào)度

    Spring 中使用Quartz實現(xiàn)任務(wù)調(diào)度

    這篇文章主要介紹了Spring 中使用Quartz實現(xiàn)任務(wù)調(diào)度,Spring中使用Quartz 有兩種方式,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用

    關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用

    這篇文章主要介紹了關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring解決循環(huán)依賴的原理源碼解析

    Spring解決循環(huán)依賴的原理源碼解析

    循環(huán)依賴指的是兩個或多個Bean互相依賴,導致初始化時出現(xiàn)死循環(huán),本文給大家介紹Spring解決循環(huán)依賴的原理 + 源碼解讀,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Spring Boot基于Active MQ實現(xiàn)整合JMS

    Spring Boot基于Active MQ實現(xiàn)整合JMS

    這篇文章主要介紹了Spring Boot基于Active MQ實現(xiàn)整合JMS,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • springboot 整合 nacos 配置實現(xiàn)多個環(huán)境不同配置

    springboot 整合 nacos 配置實現(xiàn)多個環(huán)境不同配置

    本文介紹了Nacos配置中心的優(yōu)勢,包括與Apollo的性能對比,Nacos服務(wù)端的安裝與配置,以及如何在SpringBoot項目中集成Nacos進行多環(huán)境配置,提供了詳細的步驟,包括下載、安裝、配置中心的創(chuàng)建和項目集成,旨在幫助開發(fā)者更好地使用Nacos進行項目配置管理
    2024-09-09
  • java實現(xiàn)簡單計算器功能

    java實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • maven?解包依賴項中的文件的解決方法

    maven?解包依賴項中的文件的解決方法

    Maven是java中的一種項目管理、項目構(gòu)建、依賴管理的工具,接下來通過本文給大家介紹maven?解包依賴項中的文件,需要的朋友可以參考下
    2022-07-07
  • Java 實戰(zhàn)范例之線上婚紗攝影預(yù)定系統(tǒng)的實現(xiàn)

    Java 實戰(zhàn)范例之線上婚紗攝影預(yù)定系統(tǒng)的實現(xiàn)

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+javaweb+SSM+springboot+mysql實現(xiàn)一個線上婚紗攝影預(yù)定系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11

最新評論

宽城| 新余市| 宝坻区| 宣化县| 台中市| 白玉县| 陇西县| 同心县| 大石桥市| 子洲县| 宜良县| 南京市| 塘沽区| 金乡县| 文安县| 宜川县| 奈曼旗| 德兴市| 尼木县| 怀化市| 岳阳市| 鄂伦春自治旗| 将乐县| 九江县| 潜江市| 江口县| 萨迦县| 东乡县| 蒙阴县| 井冈山市| 华蓥市| 明水县| 日土县| 大余县| 沅江市| 壶关县| 庆阳市| 湖北省| 普格县| 靖江市| 贵阳市|