一般使用spring boot开发的web项目都是通过jar包方式运行,使用spring boot内置的tomcat 服务器。现在有个新的需求是将项目部署到外部服务器,在此记录一下遇到的问题。

spring boot开发的web项目部署到外部tomcat服务器,常规步骤为:
1.pom文件排除tomcat依赖,添加javax.servlet-api依赖,并设置打包方式为war。
2.启动类继承SpringBootServletInitializer类并覆盖configure方法。
3.通过maven打成war包并放置到tomcat服务器webapps目录下,启动服务器即可。

但在实际测试中发现问题(tomat版本10.0.16):浏览器访问提示找不到资源
在这里插入图片描述
但项目通过IDEA调试代码均可正常访问
在这里插入图片描述
当前项目使用的springboot版本为2.6.7,
在这里插入图片描述
搜索测试网上多种方法仍不能解决。通过查看IDEA控制台启动日志发现项目默认包含的tomcat版本为9.0.62,怀疑版本差异导致。
在这里插入图片描述
下载tomcat 9.0.62部署同一个项目,启动成功,见到了熟悉的“spring”图标
在这里插入图片描述
浏览器访问成功
在这里插入图片描述
再对比前边tomcat 10.0.16的启动过程,显示项目部署完成,而且在服务器的管理界面也能看到该项目,但没有正常启动。
在这里插入图片描述

总结:

关于以上问题,又搜索了一些资料,找到的问题点:tomcat官网显示,自tomcat 10开始,java API的主包从javax改为jakarta,因此tomcat9及之前的项目将不能在新版本上运行。
在这里插入图片描述
在使用tomcat 9成功运行之后,又做了一些测试,发现文章开头讲到的部署war包的常规步骤中,只有“启动类继承SpringBootServletInitializer类”是必要的,实际上可以不覆盖configure方法,可以不添加servlet-api依赖,也可以不排除tomcat依赖。都不会影响正常运行。

以上只测试了当前的简单项目,对于其他问题欢迎留言讨论。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐