真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot內(nèi)嵌Tomcat臨時目錄問題-創(chuàng)新互聯(lián)

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

在東坡等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設計制作按需求定制開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,高端網(wǎng)站設計,成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站建設公司,東坡網(wǎng)站建設費用合理。

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

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

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

1. 背景

線上保障,上線運行了幾天的SpringBoot應用,突然遇到問題:/tmp/tomcatXXX/work/Tomcat/localhost/XXX is not valid。

應用不會存在/tmp/tomcatXXX/work/Tomcat/localhost/ROOT目錄。經(jīng)查詢,是tomcat在文件上傳時,會先對文件進行復制到臨時目錄,就是該目錄。之前的應用運行是正常的,現(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)沒被訪問過的文件。但是到了這里,有個疑問就是,昨天可以的也就是該目錄是被訪問過,今天怎么會被清除咧?

這個本人確實當時很疑惑,然后對應用的假設為:/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為空目錄**)。應用再去訪問就報錯了。

3. 方案

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

1.從Linux層面修改 /tmp目錄的清理策略,比較簡單,略過

2.指定新的系統(tǒng)臨時文件路徑

-Djava.io.tmpdir=/var/tmp

3. 配置中修改tomcat的臨時目錄

server:
    tomcat:
       basedir: /var/tmp/

4.代碼中配置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();
? }
}

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

這個方案稍微麻煩些,就多啰嗦下。其實該方式在spring-boot2.1.4版本進行了修訂:在臨時目錄不存在就創(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.
        }
         //新增代碼結束
         SkipPatternJarScanner.apply(context, this.tldSkipPatterns);

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文名稱:SpringBoot內(nèi)嵌Tomcat臨時目錄問題-創(chuàng)新互聯(lián)
當前地址:http://weahome.cn/article/joeos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部