1,报错:java.io.IOException: The temporary upload location [/tmp/tomcat.3211626063131935931.9091/work/Tomcat/localhost/ROOT] is not valid
这是因为springboot内置的tomcat临时目录丢失不见,不见的原因是因为linux的机制,在打成jar启动项目后会在 /tmp/ 下创建临时目录,但是这个临时如果长时间没有访问,linux会对没有作用的文件进行清理,就导致了如上的找不到文件而导致上传失败。
解决办法:
一:在springboot项目的配置文件中指定临时目录创建地址,这样linux不会删除这种文件,如:
#添加下面一行配置 ,并且在Linux根目录下下建个/app/temp文件
server.tomcat.basedir=/usr/local/tmp
二:修改linux配置,让linux忽略该文件不进行删除,编辑tmp.conf文件
vi /usr/lib/tmpfiles.d/tmp.conf
添加如下内容:
## 新增排除目录
x /tmp/tomcat.*
即不删除tomcat开头的临时文件
2、集成百度富文本上传时,同样在一段时间不操作后也不能上传文件,显示配置文件初始化失败
通过排查发现同样是根路径找不到了,但是上面不是已经排除了吗,后来经过测试发现启动时同时还会生成另外一个文件,即 tomcat-docbase.*,当这个文件删除后富文本上传就失败了,springboot百度富文本上传接口入口处打印的根路径值为null
@ResponseBody
public String exec(HttpServletRequest request,HttpServletResponse response) throws Exception{
try{
request.setCharacterEncoding("utf-8");
response.setHeader("Content-Type" , "application/json");
// String rootPath = request.getRealPath( "/" );
String rootPath = request.getSession().getServletContext().getRealPath("/");
System.out.println("rootPath::::"+rootPath);
return new ActionEnter( request, rootPath ).exec();
}catch(Exception e){
throw new Exception(e);
}
}
如上是接口,打印rootPath有值时可以上传,为null时上传失败,为此重新更改了tmp.conf文件
## 新增排除目录
x /tmp/tomcat-docbase.*.8000
8000是项目端口号,因为只有文件上传受影响,所以其他工程还是遵循linux的规则,定期删除不用的文件,只排除文件上传服务。