使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中

本文介绍如何将Spring Boot项目打包为WAR文件,并部署到外部Tomcat容器中运行,包括排除内置Tomcat容器、实现SpringBootServletInitializer接口等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:本项目基于maven构建

spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行;


spring-boot项目需要部署在外部容器中的时候,spring-boot导出的war包无法再外部容器(tomcat)中运行或运行报错,本章就是详细讲解如何解决这个问题

1、pom.xml一览

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>项目名称自行自行定义</groupId>  
  5.     <artifactId>项目名称自行定义</artifactId>  
  6.     <version>1.1.2-SNAPSHOT</version>  
  7.     <packaging>war</packaging>  
  8.     <parent>  
  9.         <groupId>org.springframework.boot</groupId>  
  10.         <artifactId>spring-boot-starter-parent</artifactId>  
  11.         <version>1.4.0.RELEASE</version>  
  12.     </parent>  
  13.     <dependencies>  
  14.         <!-- spring-boot web -->  
  15.         <dependency>  
  16.             <groupId>org.springframework.boot</groupId>  
  17.             <artifactId>spring-boot-starter-web</artifactId>  
  18.             <!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->  
  19.             <exclusions>  
  20.                 <exclusion>  
  21.                     <groupId>org.springframework.boot</groupId>  
  22.                     <artifactId>spring-boot-starter-tomcat</artifactId>  
  23.                 </exclusion>  
  24.             </exclusions>  
  25.                
  26.         </dependency>  
  27.         <dependency>  
  28.             <groupId>javax.servlet</groupId>  
  29.             <artifactId>javax.servlet-api</artifactId>  
  30.         </dependency>  
  31.         <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->  
  32.         <dependency>  
  33.             <groupId>redis.clients</groupId>  
  34.             <artifactId>jedis</artifactId>  
  35.         </dependency>  
  36.   
  37.         <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->  
  38.         <dependency>  
  39.             <groupId>org.apache.commons</groupId>  
  40.             <artifactId>commons-pool2</artifactId>  
  41.         </dependency>  
  42.   
  43.         <dependency>  
  44.             <groupId>org.json</groupId>  
  45.             <artifactId>json</artifactId>  
  46.         </dependency>  
  47.   
  48.         <dependency>  
  49.             <groupId>org.springframework.boot</groupId>  
  50.             <artifactId>spring-boot-starter-test</artifactId>  
  51.             <scope>test</scope>  
  52.         </dependency>  
  53.         <dependency>  
  54.             <groupId>com.jayway.jsonpath</groupId>  
  55.             <artifactId>json-path</artifactId>  
  56.             <scope>test</scope>  
  57.         </dependency>  
  58.     </dependencies>  
  59.       
  60.     <!-- Package as an executable jar -->  
  61.     <build>  
  62.         <plugins>  
  63.             <plugin>  
  64.                 <groupId>org.springframework.boot</groupId>  
  65.                 <artifactId>spring-boot-maven-plugin</artifactId>  
  66.             </plugin>  
  67.         </plugins>  
  68.     </build>  
  69.     <repositories>  
  70.         <repository>  
  71.             <id>spring-releases</id>  
  72.             <url>https://repo.spring.io/libs-release</url>  
  73.         </repository>  
  74.     </repositories>  
  75.     <pluginRepositories>  
  76.         <pluginRepository>  
  77.             <id>spring-releases</id>  
  78.             <url>https://repo.spring.io/libs-release</url>  
  79.         </pluginRepository>  
  80.     </pluginRepositories>  
  81. </project>  


2、排除org.springframework.boot依赖中的tomcat内置容器

注意:只有排除内置容器,才能让外部容器运行spring-boot项目

org.springframework.boot依赖中的排除项,测试时不要排除内置容器,会导致springboot无法测试运行,导出war包时再加上该项即可

<!-- spring-boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内置容器,排除内置容器导出成war包可以让外部容器运行spring-boot项目-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

3、实现SpringBootServletInitializer接口

spring-boot入口类必须实现SpringBootServletInitializer接口的configure方法才能让外部容器运行spring-boot项目

注意:SpringBootServletInitializer接口需要依赖 javax.servlet

  1. package cn.eguid.Run;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  5. import org.springframework.boot.builder.SpringApplicationBuilder;  
  6. import org.springframework.boot.web.support.SpringBootServletInitializer;  
  7. import org.springframework.context.annotation.ComponentScan;  
  8.   
  9. import cc.eguid.livepush.PushManager;  
  10. import cc.eguid.livepush.PushManagerImpl;  
  11. import cn.eguid.livePushServer.redisManager.RedisMQHandler;  
  12.   
  13. @SpringBootApplication  
  14. // 开启通用注解扫描  
  15. @ComponentScan  
  16. public class Application extends SpringBootServletInitializer {  
  17.     /** 
  18.      * 实现SpringBootServletInitializer可以让spring-boot项目在web容器中运行 
  19.      */  
  20.     @Override  
  21.     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
  22.         builder.sources(this.getClass());  
  23.         return super.configure(builder);  
  24.     }  
  25.       
  26.     public static void main(String[] args) {  
  27.         SpringApplication.run(Application.class, args);  
  28.           
  29.     }  
  30. }  


总结:

外部容器运行spring-boot项目,只需要在原项目上做两件事

1、在pom.xml中排除org.springframework.boot的内置tomcat容器

2、spring-boot入口实现SpringBootServletInitializer接口

补充:SpringBootServletInitializer接口依赖javax.servlet包,需要在pom.xml中引入该包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值