springboot臨時文件存儲目錄配置方式
springboot臨時文件存儲目錄配置
場景:
上傳文件功能報錯,然后排查日志。
報錯日志:
The temporary upload location [/tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost/ROOT] is not valid
原因:
在linux系統中,springboot應用服務再啟動(java -jar 命令啟動服務)的時候,會在操作系統的/tmp目錄下生成一個tomcat*的文件目錄,上傳的文件先要轉換成臨時文件保存在這個文件夾下面。
由于臨時/tmp目錄下的文件,在長時間(10天)沒有使用的情況下,就會被系統機制自動刪除掉。所以如果系統長時間沒有使用到臨時文件夾,就可能導致上面這個問題。
解決辦法:
1.創(chuàng)建臨時文件夾:
mkdir -p /tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost/ROOT
后面可能還會出現這種情況
2.application.properties重新配置一個文件目錄,然后重啟項目
# 存放Tomcat的日志、Dump等文件的臨時文件夾,默認為系統的tmp文件夾 server.tomcat.basedir=/data/apps/temp
3.配置類配置臨時文件存儲目錄
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation(tmepPath);
return factory.createMultipartConfig();
}
Springboot修改臨時文件的存儲位置
報錯
項目在線運行了一段時間后,上傳文件時拋出如下異常:
The temporary upload location [/tmp/tomcat.*.80/work/Tomcat/localhost/ROOT] is not valid
經過查找,采用了如下的解決方式【修改臨時文件的位置】
在application.yml 文件中添加
location: tempDir: /opt/location/tempDir #此處為*unix的系統相關位置
項目中添加配置類
@Configuration
public class MultipartConfig {
@Value("${location.tempDir:/opt/tempDir}")
private String tempDir;
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
File tmpDirFile = new File(tempDir);
// 判斷文件夾是否存在
if (!tmpDirFile.exists()) {
tmpDirFile.mkdirs();
}
factory.setLocation(tempDir);
return factory.createMultipartConfig();
}
}
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring?Boot集成Milvus快速入門demo示例詳解
Milvus是一種高性能向量數據庫,支持從筆記本到大型分布式系統的多環(huán)境運行,它以開源和云服務形式提供,是LFAI & Data Foundation的項目,采用Apache 2.0許可,Milvus特別支持高并行化和解耦的系統架構,使其能夠隨數據增長而擴展,支持各種復雜搜索功能,滿足企業(yè)級AI應用需求2024-09-09
MybatisPlus分頁查詢與多條件查詢介紹及查詢過程中空值問題的解決
mybatisplus是個很好用的插件,相信小伙伴們都知道,下面這篇文章主要給大家介紹了關于mybatis-plus實現分頁查詢與多條件查詢介紹及查詢過程中空值問題的相關資料,需要的朋友可以參考下2022-10-10
Java中的SynchronousQueue阻塞隊列及使用場景解析
這篇文章主要介紹了Java中的SynchronousQueue阻塞隊列及使用場景解析,SynchronousQueue 是 Java 中的一個特殊的阻塞隊列,它的主要特點是它的容量為0,這意味著 SynchronousQueue不會存儲任何元素,需要的朋友可以參考下2023-12-12

