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

