springboot项目 本地 部署到外部tomcat

最近搞了个demo,springboot项目本地部署到外部tomcat,本来是一件非常简单的事,结果遇到了个坑,说白了还是spingboot原理不熟。。
spingboot其实它并没有完全遵守 servlet3.0 的规范。
springboot会继承一个类SpringBootServletInitializer,在这个类的onStartup方法中,启动了整个Spring容器。
在这里插入图片描述
但是这个demo是我本地用idea生成的maven项目,所以web.xml没有删除,然后本地启动tomcat startup.bat,访问localhost:8080 tomcat页面显示没问题,我以为tomcat启动正常,但是看似没报错,其实还是有问题,搞了我一上午。。去本地tomcat目录的tomcat-8.5\apache-tomcat-8.5.38\logs localhost.2021-03-31.log 该文件有报错信息 ,根据报错信息Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml! 发现 web.xml 配置有问题,一想springboot不需要web.xml,删除后重新打war包 放到tomcat的webapps下,重启tomcat访问正常了!
在这里插入图片描述

在这里插入图片描述

Spring Boot 通常用于创建独立的、生产级别的基于Spring的应用程序,其默认方式是打包成一个可执行的jar包。然而,有时候出于特定的生产环境需求,我们需要将Spring Boot应用打包成war包并部署外部Tomcat服务器上。以下是一个基本的步骤说明: 1. **排除内置的Tomcat依赖**:在你的pom.xml文件中,需要将Spring Boot的内嵌Tomcat依赖设置为scope为provided,这样在打包的时候就不会将Tomcat打包进war包内。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` 2. **修改启动类**:让Spring Boot的启动类继承`SpringBootServletInitializer`,并重写`configure`方法,这样做是为了让Spring Boot应用能够在外部Tomcat容器中正常启动。 ```java @SpringBootApplication public class MyApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyApplication.class); } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 3. **打包应用**:使用Maven或Gradle命令将应用打包成war包。对于Maven,通常使用`mvn clean package`命令。 4. **部署war包**:将生成的war文件复制到Tomcat的`webapps`目录下。 5. **启动Tomcat**:启动Tomcat服务器,如果一切顺利,你的Spring Boot应用将作为应用上下文被部署Tomcat中,并可以通过配置的端口和路径访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值