最近用 springboot 开发了个项目经常一开始好好的,但运行一段时间后经常无端出现如下问题:
2018-01-14 10:32:17.039 ERROR 10086 --- [nio-8081-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException] with root cause
java.net.SocketTimeoutException: null 多次碰到这个错误提醒,并不致命
但运行一段时间后(不清楚具体多长时间)就会出现一些致命问题,如下
奔着错误提示就大胆猜测,各种百度发现了问题的症结所在:
1.spring boot 的应用服务在启动的时候,会生成在操作系统的/tmp 目录下生成一个 Tomcat.**的文件目录,用于"java.io.tmpdir"文件流操作
TomcatEmbeddedServletContainerFactory
2.程序对文件的操作时:会生成临时文件,暂存在临时文件中;
lunix 系统的 tmpwatch 命令会删除 10 天未使用的临时文件;
长时间不操作,导致/tmp 下面的 tomcat 临时文件目录被删除,且删除的文件不可恢复,上传文件时获取不到文件目录,直至报错
既然发现症结所在了,问题自然迎刃而解了:
方案一:自己启动 jar 包的时候带上参数 -Djava.io.tmpdir=“自定义目录”
方案二:通过修改 application.properties 来指定 java.io.tmdir 如添加:server.tomcat.basedir=${user.home}/deployer/tomcat
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于