一、问题描述
废话不多说,直击部署中难以解决的一种情况。在springboot项目部署外部tomcat时,按照网上的各种方案,该加的依赖也加上了,Application也继承了war包部署接口SpringBootServletInitializer,可打包出来后,从外部tomcat启动时,tomcat能启动成功,但访问项目包时却显示404错误,如图:
但是tomcat能够正常访问:
这是为什么呢?这里的404是表示没有访问到这个资源路径,究竟是哪里出错了,明明是按照网上教程写的呀。不要急,我们来看看tomcat启动日志,可以看到,tomcat没有启动spring,所以这也是404资源访问失败的原因。如何解决呢,往下看。
二、解决方案
首先我们要清楚tomcat是为什么扫描不到spring,如果配置都是没问题的话,那么只有一种原因,版本兼容问题。你的tomcat版本极有可能与jdk版本不兼容,所以导致外部tomcat无法扫描到spring。拿我这个项目来说,我的是springboot3+jdk17,而tomcat9与jdk17不太兼容,所以罪魁祸首就是版本的兼容问题。那么给出解决方案,如果是基于jdk17的springboot,那么将tomcat更换成tomcat10.1,jdk21、jdk11或8的springboot项目也可以根据官网给出的图更换对应的tomcat版本,这里为了方便大家查看,给出版本对应图,实际的兼容性后面会出一期给大家测一下
更换tomcat10.1之后,将项目打包部署在webapps下
(记得把环境变量也要换成tomcat10,否则启动的服务还是原来的tomcat版本):
再次启动tomcat服务,可以看到访问到spring了:
接下来去浏览器地址输入tomcat地址,默认是8080,再输入tomcat下的项目名url:
成功解决问题!
三、小结
只要确认自己的环境依赖都没有错误,那么就可以考虑一下版本的兼容性,在开发中很多的bug也是版本不兼容导致的。如果对大家有用的话,希望大家能够点赞收藏关注,后续会带来完整从0到1的springboot后台部署tomcat、前后端分离部署tomcat教程以及更多的技术解决方案,感谢大家支持!