SpringBoot的jsp页面,长时间未访问后,再次访问就出现ClassNotFound的404等异常

项目环境

SpringBoot 1.5.9.RELEASE

centos 6.x


问题描述

本人公司项目中使用了SpringBoot+jsp,在产品上线一段时间后观察到,某些不常访问的JSP页面,在经过一段时间后再次访问,发送ClassNotFound的异常。同样的,其他有伙伴还有可能出现临时文件丢失这种现象。


问题原因

在之前的传统项目中,我们都是将代码打成war包放在tomcat下面运行,当我们访问jsp页面时,jvm会加载jsp页面,并将页面编译为class文件,这个class文件是存放在tomcat的work目录下面的,即缓存目录;在SpringBoot中,我们使用的内嵌的tomcat服务器,那么,内嵌服务器的work目录在哪里呢?经查阅官方文档得知,SpringBoot在centos服务器中,会将centos服务器/tmp目录作为work目录,存放临时文件;但恰恰十分巧合的是,centos服务器对/tmp目录,有一个tmpwatch操作,详情点击我,这个操作简单来讲,就是会删除/tmp目录下,240小时内未被访问过的文件,那么问题原因就十分明显了:jsp编译后的class文件,被tmpwatch这个操作删除掉了。


问题解决

更改SpringBoot的临时目录:
server.tomcat.basedir=/usr/local/tmp
自此,解决404的问题了。
评论 (0)