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

SpringBoot內(nèi)嵌Tomcat臨時目錄問題及解決

 更新時間:2025年04月21日 15:33:10   作者:火冠蜂鳥  
這篇文章主要介紹了SpringBoot內(nèi)嵌Tomcat臨時目錄問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot內(nèi)嵌Tomcat臨時目錄問題

聽說后面上線可能tomcat臨時文件夾會被Linux刪除,會報找不到錯誤,現(xiàn)在趕緊記錄一下,已被不時之需。

存在文件上傳的SpringBoot項目,在Linux系統(tǒng)部署之后,會在系統(tǒng)的tmp目錄下生成一個帶tomcat 及 隨機字符串的臨時目錄。

該目錄有可能被linux系統(tǒng)在一定時間后自動清除掉,導(dǎo)致再次上傳文件的時候,系統(tǒng)就會報錯。

意思是tomcat的臨時目錄會被tmpwatch刪除掉,甚至可能刪除掉class文件,導(dǎo)致錯誤的發(fā)生

1.背景

線上保障,上線運行了幾天的SpringBoot應(yīng)用,突然遇到問題:

/tmp/tomcatXXX/work/Tomcat/localhost/XXX is not valid。

應(yīng)用不會存在/tmp/tomcatXXX/work/Tomcat/localhost/ROOT目錄。經(jīng)查詢,是tomcat在文件上傳時,會先對文件進(jìn)行復(fù)制到臨時目錄,就是該目錄。

之前的應(yīng)用運行是正常的,現(xiàn)在出現(xiàn)這個情況,顯然是創(chuàng)建好的目錄被刪除了。對,就是這個特殊的/tmp目錄Linux存在清除策略。

清除策略的配置文件路徑如下:

/usr/lib/tmpfiles.d/tmp.conf

打開

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d          
v /var/tmp 1777 root root 30d      

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

發(fā)現(xiàn)會清除10天內(nèi)沒被訪問過的文件。但是到了這里,有個疑問就是,昨天可以的也就是該目錄是被訪問過,今天怎么會被清除咧?

這個本人確實當(dāng)時很疑惑,然后對應(yīng)用的假設(shè)為:

/tmp/tomcat.4344543554352.8080/work/Tomcat/localhost/test,發(fā)現(xiàn)該目錄下為空。也就是臨時文件會被tomcat清理掉,但是test目錄的創(chuàng)建時間確實是在10天前。

到了這里就明白了,雖然test目錄下文件每天都會有更新,但是**不會影響test目錄的訪問時間**,并且該文件被刪掉了。/tmp目錄的清理機制發(fā)現(xiàn)test空目錄是10天前,就直接清理了(**test為空目錄**)。應(yīng)用再去訪問就報錯了。

2.方案

原因搞清楚了,解決方案自然很明了,大致有3種:

  • 1.從Linux層面修改 /tmp目錄的清理策略,比較簡單,略過
  • 2.指定新的系統(tǒng)臨時文件路徑
-Djava.io.tmpdir=/var/tmp
  • 3. 配置中修改tomcat的臨時目錄
server:
    tomcat:
       basedir: /var/tmp/

3.代碼中配置tomcat臨時目錄

@Configuration
public class MultipartConfig {
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
String location = System.getProperty("user.dir") + "/data/tmp";
File tmpFile = new File(location);
if (!tmpFile.exists()) {
tmpFile.mkdirs();
}
factory.setLocation(location);
return factory.createMultipartConfig();
}
}

4.tomcat在臨時目錄不存在先創(chuàng)建

這個方案稍微麻煩些,就多啰嗦下。

其實該方式在spring-boot2.1.4版本進(jìn)行了修訂:在臨時目錄不存在就創(chuàng)建臨時目錄。

在該類spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java中添加了幾行代碼:

        catch (NoSuchMethodError ex) {
            // Tomcat is < 8.0.30. Continue
        }
        //新增代碼開始
        try {
            context.setCreateUploadTargets(true);
        }
        catch (NoSuchMethodError ex) {
            // Tomcat is < 8.5.39. Continue.
        }
         //新增代碼結(jié)束
         SkipPatternJarScanner.apply(context, this.tldSkipPatterns);

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享

    java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享

    這篇文章主要介紹了java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享,兩種實現(xiàn):OpenSessionView實現(xiàn)、TreeAction實現(xiàn)。具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java中ArrayList、Vector、LinkedList的核心區(qū)別與應(yīng)用場景詳解

    Java中ArrayList、Vector、LinkedList的核心區(qū)別與應(yīng)用場景詳解

    在Java編程語言中ArrayList、Vector和LinkedList是三個常見的列表實現(xiàn),它們都實現(xiàn)了List接口,這篇文章主要介紹了Java中ArrayList、Vector、LinkedList的核心區(qū)別與應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • Java 內(nèi)存溢出的原因和解決方法

    Java 內(nèi)存溢出的原因和解決方法

    這篇文章主要介紹了Java 內(nèi)存溢出的原因和解決方法,幫助大家更好的維護(hù)Java程序,保持穩(wěn)定性,感興趣的朋友可以了解下
    2020-12-12
  • Java錯誤:進(jìn)行語法分析時已到達(dá)文件結(jié)尾的解決

    Java錯誤:進(jìn)行語法分析時已到達(dá)文件結(jié)尾的解決

    這篇文章主要介紹了Java錯誤:進(jìn)行語法分析時已到達(dá)文件結(jié)尾的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • hadoop client與datanode的通信協(xié)議分析

    hadoop client與datanode的通信協(xié)議分析

    本文主要分析了hadoop客戶端read和write block的流程. 以及client和datanode通信的協(xié)議, 數(shù)據(jù)流格式等
    2012-11-11
  • springboot配置允許跨域訪問代碼實例

    springboot配置允許跨域訪問代碼實例

    這篇文章主要介紹了springboot配置允許跨域訪問代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java微信公眾平臺之獲取地理位置

    Java微信公眾平臺之獲取地理位置

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺之獲取地理位置的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Spring Bean初始化的三種常用方式(易懂版)

    Spring Bean初始化的三種常用方式(易懂版)

    在Spring框架開發(fā)中,Bean的生命周期管理是核心基礎(chǔ)知識點,而Bean初始化作為生命周期中的關(guān)鍵環(huán)節(jié),負(fù)責(zé)在Bean實例創(chuàng)建并完成依賴注入后,執(zhí)行資源加載、參數(shù)配置、緩存初始化等核心業(yè)務(wù)邏輯,本文將詳細(xì)拆解Spring中3種主流的Bean初始化方式,需要的朋友可以參考下
    2025-12-12
  • Springboot優(yōu)化內(nèi)置服務(wù)器Tomcat優(yōu)化方式(underTow)

    Springboot優(yōu)化內(nèi)置服務(wù)器Tomcat優(yōu)化方式(underTow)

    本文詳細(xì)介紹了Spring Boot中Tomcat和Undertow服務(wù)器的配置和優(yōu)化,包括初始線程數(shù)、最大線程數(shù)、最小備用線程數(shù)、最大請求數(shù)等參數(shù)的優(yōu)化建議,以及在高并發(fā)場景下Undertow相對于Tomcat的優(yōu)勢
    2024-12-12
  • Java中String的intern()方法詳細(xì)說明

    Java中String的intern()方法詳細(xì)說明

    這篇文章主要介紹了Java中String的intern()方法詳細(xì)說明,String::intern()是一個本地方法,他的作用就是如果字符串常量池中已經(jīng)包含了一個等于此String對象的字符串,則返回代表池中的這個字符串額String對象的引用,需要的朋友可以參考下
    2023-11-11

最新評論

天柱县| 灯塔市| 罗定市| 庆云县| 云浮市| 邵阳县| 深水埗区| 云安县| 漯河市| 上犹县| 尖扎县| 买车| 深水埗区| 永嘉县| 云龙县| 平乡县| 繁峙县| 大渡口区| 岐山县| 红原县| 巴青县| 中牟县| 慈溪市| 明光市| 冀州市| 紫阳县| 盘锦市| 霍城县| 厦门市| 天镇县| 湘潭县| 长子县| 长子县| 屏东县| 江孜县| 焉耆| 葵青区| 广州市| 海安县| 巍山| 宽城|