最近将之前的项目部署到了服务器之后,发现在长时间不访问网站后,再次打开页面会出现白屏现象,除非重新刷新页面,否则无法正常加载数据,使用F12查看请求返回的JSON数据发现提示内部错误,由此可知问题在服务端。
服务器相关信息:
登录服务器,依次检查Nginx、Tomcat、Redis、MySql服务的运行状况,使用如下命令:
ps -ef|grep {服务名称}
检查后一切正常,下一步我们需要从日志文件入手,进入Tomcat安装目录,我这里使用了Tomcat压缩包解压的方式,因此只需要进入logs目录下即可(根据自己安装的实际目录寻找就行):
cd /resources/apache-tomcat-8.5.54/logs/
查看catalina.out文件内容,注意:此文件内容即为在Windows下使用IDE开发工具时Tomcat实时输出的内容,可以帮助我们快速定位问题。
cat catalina.out
发现异常信息如下:
通过内容可知,由于太久没有使用C3P0的连接池,超过了最大的有效时间,因此连接池资源被释放,MySql无法获得有效的资源,因此也无法取得数据。
知道了问题,那么解决也很容易,异常信息中也提供了解决方案,也就是说我们可以在mysql连接中添加autoReconnect属性来避免这个问题。
由于我的项目在服务器上,使用war包的方式来部署,因此需要修改相关信息就需要重新生成war包或者对当前war包内的配置修改,为了方便起见直接进入Tomcat的webapps目录对war包修改,(这里我的war包名称为o2o,使用时替换为你自己的项目名称)
cd /resources/apache-tomcat-8.5.54/webapps/o2o/WEB-INF/classes
修改jdbc.properties的内容
vim jdbc.properties
在文件最后添加autoReconnect=true,多个参数之间使用&连接。(若为本地IDE开发,直接修改对应jdbc配置文件内容即可。)
jdbc.url = jdbc:mysql://{yourIpAddress}:3306/o2o?useUnicode=true&autoReconnect=true
至此问题修复完成。