undertow、tomcat下臨時(shí)目錄tmp拋錯(cuò)誤異常的解決
問題場(chǎng)景
springboot上傳文件報(bào)錯(cuò):
java.nio.file.NoSuchFileException: /tmp/undertow.XXX
java.nio.file.NoSuchFileException: /tmp/tomcat.XXX
原因分析
系統(tǒng)長(zhǎng)時(shí)間不使用導(dǎo)致臨時(shí)目錄被刪除
Spring Boot 應(yīng)用以 java -jar 命令啟動(dòng)時(shí),會(huì)在操作系統(tǒng)的 /tmp 目錄下生成一個(gè)臨時(shí)目錄,
對(duì)于http POST請(qǐng)求來說,它需要使用這個(gè)臨時(shí)目錄來存儲(chǔ)post數(shù)據(jù)。
由于臨時(shí) /tmp 目錄下的文件,在長(zhǎng)時(shí)間沒有使用的情況下,系統(tǒng)執(zhí)行了 tmp 目錄清理服務(wù),導(dǎo)致 /tmp/XXXX文件被清理,然而在上傳的時(shí)候,undertow或tomcat 服務(wù)器需要?jiǎng)?chuàng)建臨時(shí)文件,但是調(diào)用 Files.createFile(…) 的時(shí)候就會(huì)發(fā)現(xiàn)找不到父目錄,才導(dǎo)致了以上的錯(cuò)誤。
解決方案
在系統(tǒng)中手動(dòng)指定臨時(shí)目錄
undertow服務(wù)器
- 在系統(tǒng)中手動(dòng)創(chuàng)建臨時(shí)文件存放目錄,并且分配權(quán)限
# 創(chuàng)建臨時(shí)文件存放目錄 mkdir -p /data/upload_tmp # 修改為可寫可讀可執(zhí)行權(quán)限 chmod 777 /data/upload_tmp
- 項(xiàng)目配置文件添加以下配置,并重啟服務(wù)
spring:
servlet:
multipart:
# 設(shè)置臨時(shí)目錄
location: /data/upload_tmp
tomcat服務(wù)器
- 在系統(tǒng)中手動(dòng)創(chuàng)建臨時(shí)文件存放目錄,并且分配權(quán)限
# 創(chuàng)建臨時(shí)文件存放目錄 mkdir -p /data/upload_tmp # 修改為可寫可讀可執(zhí)行權(quán)限 chmod 777 /data/upload_tmp
- 項(xiàng)目配置文件添加以下配置
spring:
http:
multipart:
location: /data/upload_tmp
server:
tomcat:
basedir: /tmp/tomcat
- 配置MultipartConfig
@Configuration
public class MultipartConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/tmp/tomcat");
return factory.createMultipartConfig();
}
}
- 添加啟動(dòng)參數(shù) -java.tmp.dir=/path/to/application/temp/ ,并重啟
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
tomcat的catalina.out日志按自定義時(shí)間格式進(jìn)行分割的操作方法
這篇文章主要介紹了tomcat的catalina.out日志按自定義時(shí)間格式進(jìn)行分割,包括安裝Cronolog,修改Tomcat下bin/catalina.sh文件,shell利用crontab自動(dòng)清除日志的相關(guān)知識(shí),需要的朋友可以參考下2022-04-04
Tomcat Server的設(shè)計(jì)和實(shí)現(xiàn):StandardServer詳解
文章主要介紹了Tomcat中StandardServer的整體類依賴結(jié)構(gòu),通過解析server.xml文件來理解Server的相關(guān)配置屬性及其作用,感興趣的朋友跟隨小編一起看看吧2026-04-04
Tomcat在linux環(huán)境中開機(jī)自啟(定時(shí)重啟)的方法
我們經(jīng)常會(huì)遇到服務(wù)器斷電或異常,而異常后tomcat中部署的web項(xiàng)目需要我手動(dòng)去啟動(dòng),為此,特別貢獻(xiàn)出Linux環(huán)境中Tomcat開機(jī)自啟的方式供學(xué)習(xí)使用,需要的朋友可以參考下2023-10-10
servlet和tomcat_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了servlet和tomcat,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Tomcat中指定JDK版本的方法實(shí)現(xiàn)
在Tomcat中指定JDK版本可以通過設(shè)置環(huán)境變量或修改啟動(dòng)腳本來實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
如何在IntelliJ IDEA 2018上配置Tomcat并運(yùn)行第一個(gè)JavaWeb項(xiàng)目
這篇文章主要介紹了在IntelliJ IDEA 2018上配置Tomcat并運(yùn)行第一個(gè)JavaWeb項(xiàng)目,需要的朋友可以參考下2020-09-09

