1、现象描述
由于某种你知道或不知道的原因,Spring Boot工程被打成了war包进行部署,在Linux上部署后在请求某功能时报错,关键日志如下:
nested exception is java.io.IOException: The temporary upload location
[/tmp/tomcat.816155955786196858.8084] is not valid
显示“临时的上次路径无效”,从Linux上查看该目录,果然也没有,那报错也就不足为怪了。
2、问题解决
问了其他同学,都说他们部署时没有任何问题,我就奇了怪了, 查了一下发现原因是这样的:一些Linux系统,会自动清理/tmp目录。
既然这样我们来解决一下这个问题。
2.1 创建不存在的目录(不推荐)
既然日志中说的那个目录在系统中不存在,那就创建一个呗:
mkdir -p /tmp/tomcat.816155955786196858.8084
由于操作系统的自动清理机制,这种办法显然是属于扬汤止沸型的,治标不治本,过一段时间可能又会出现问题,故不推荐。
当然有地方说直接重启war包也可以,但是我在尝试时一直不奏效,即使奏效也是不推荐的方案。
2.3 在配置文件中指定tomcat的临时路径(推荐)
在配置文件application.properties中指定tomcat的临时路径:
server.tomcat.basedir=/home/abc
路径根据实际情况自行指定即可。
在application.yml文件中的写法如下:
server:
tomcat:
basedir: /home/abc
改完之后重新打包、部署即可。
2.4 在配置类中通过@Bean指定临时目录(推荐)
@Configuration
public class MultipartConfig{
/**
* 文件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/home/abc");
return factory.createMultipartConfig();
}
}
}
3、总结
本文主要针对The temporary upload location [/tmp/……] is not valid的问题介绍了三种解决办法:创建不存在的目录、在配置文件中指定目录和通过配置类指定目录,其中的创建不存在的目录是不推荐的做法,剩下两种方法都可以使用。
好啦,问题解决,喝口水去。