为了解决在将Spring Boot 2.2.5工程打成WAR包并部署到Tomcat 9.0.31时出现的冲突问题,需要排除Spring Boot内置的Tomcat容器。排除原因在于,如果不排除内置的Tomcat,部署到生产环境的Tomcat时,可能会导致两个Tomcat实例冲突,引发应用无法正常运行的问题。排除内置Tomcat的方法有多种,推荐使用标记内置容器依赖项为provided的策略。这样,在部署到生产环境的Tomcat时,Spring Boot应用仍能使用外部的Tomcat容器,避免了冲突。
为了实现这一目标,可以继承SpringBootServletInitializer类,并重写config方法。SpringBootServletInitializer是一个帮助类,用于配置Servlet容器,确保在部署WAR包时,能够明确指定应用的启动入口。继承这个类后,仅在部署应用时告知Tomcat应用的启动逻辑,而不会影响应用代码的正常修改与测试,使得开发者可以在不中断开发流程的情况下,利用内置的Tomcat容器进行快速迭代与调试。
在进行打包与部署时,建议在pom.xml文件中使用maven插件进行自动化处理,以简化流程。首先执行clean命令清除旧包,然后使用-Dmaven.test.skip=true参数跳过测试代码的构建,最后通过maven package命令生成WAR包,并将其放置于目标文件夹。或者使用maven install命令将WAR包打包至本地仓库,供后续使用。
打包完成后,会生成两个文件,一个是WAR包,另一个是.original文件。它们实际上都是WAR包,区别在于前者包含了lib和lib-provided文件夹,后者仅包含lib文件夹。lib-provided文件夹中存放了Spring Boot中排除的Tomcat依赖,允许通过java -jar命令在命令行环境中启动应用。而.original文件仅包含lib文件夹,只能通过部署到Tomcat容器来运行。因此,实际部署时,推荐使用WAR包文件。
在使用Spring Boot应用时,建议根据开发环境使用的Tomcat版本来选择相应的版本。例如,若Spring Boot内置的是Tomcat 9,应确保在生产环境中使用的也是Tomcat 9,以避免兼容性问题。如果生产环境不允许,可以考虑在Tomcat配置中替换相应的库文件,以兼容不同版本的依赖。
为了帮助理解这一流程,以下为Spring Boot官方文档中关于WAR包发布方法的介绍,可直接参考:Spring Boot传统发布方式。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。