最近在使用Springboot应用上传文件服务器时,出现了文件不能上传,服务器报了一个500错误,大致内容如下:
cann not found path "/tmp/tomcat.6476993673939485221.8080/work/Tomcat/localhost/test"
原因分析
按照报错的内容来看,应该是上传文件时,找不到这个临时目录,但是我们的应用存放的临时目录却配置的不是这个路径。经过一番折腾,还是没有找到为什么会出现这个错,分析这个路径发现里面有个Tomcat路径,由此想到可能是Springboot中使用tomcat容器时,tomcat的容器的临时路径被清理了。
按照这个思路,在服务器中找相对的路径时,确实没有找到,那么为什么会存在这个临时路径呢?
Springboot的Jar包在启动后,会在 java.io.tempDir 对应的目录下创建几个临时目录
tomcat.6476993673939485221.8080
tomcat-docbase.647699367393948325.8080
tomcat.6476993673939485221.8080 : 这个目录用于文件上传时将文件流临时写入,待应用接收完文件流后,删除临时文件,这个就是这次失败的原因;
tomcat-docbase.6476993673939485221.8080 : 这个目录用于项目资源、日志文件临时存放目录。
由于项目部署在Linux服务器中,服务器设置了定时清理 tmp 临时目录,导致临时目录被清理掉。
解决方案:
- 按照当前错误日志重新创建目录,并检查linux服务器是否有定时清理临时文件的任务,若有,关闭该服务;
- 重启应用服务,并检查linux服务器是否有定时清理临时文件的任务,若有,关闭该服务;
- 启动Springboot应用时增加参数 -Dserver.tomcat.basedir=/xxxx/tomcat;
- 在application.properties中加入 server.tomcat.basedir=/xxxx/tomcat;
总结
经过这次错误,认识到有些错误可能是因为其他原因导致,但是出现错误时,一定要仔细分析该错误的原因,再者需要熟悉服务器相关配置与所使用的技术的优缺点
转载请注明出处 jackieonway
扫描下方二维码关注"JackieOnWay"微信公众号第一时间获取最新消息