You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Maven WAR打包细节及Tomcat配置优先级咨询

Maven打包Spring Boot应用为WAR包的具体过程

1. 修改项目打包类型

在项目根目录的pom.xml中,将打包类型从默认的jar改为war:

<packaging>war</packaging>

2. 处理嵌入式Tomcat依赖

Spring Boot的spring-boot-starter-web默认包含嵌入式Tomcat依赖。为避免打包后与外部Tomcat冲突,需要将嵌入式Tomcat依赖的作用域设为provided——这个作用域意味着依赖仅在编译和测试阶段生效,打包时不会被包含进WAR包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

如果使用Jetty等其他嵌入式容器,只需替换对应依赖并设置相同的provided作用域即可。

3. 修改启动类适配外部容器

让项目的启动类继承SpringBootServletInitializer,并重写configure方法,确保外部Tomcat能正确加载Spring Boot应用上下文:

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

这样修改后,应用既可以通过main方法用嵌入式Tomcat启动,也能部署到外部Tomcat运行。

4. 执行Maven打包命令

在项目根目录下运行以下命令完成打包:

mvn clean package

打包完成后,生成的WAR包会存放在项目的target目录中。


外部Tomcat部署时的配置优先级

当WAR包部署到外部Tomcat时,Tomcat服务器的server.xml(以及web.xml、context.xml等容器级配置文件)的优先级高于Spring Bootapplication.properties/application.yml中的Tomcat相关配置。

具体逻辑:

  • Spring Boot内的Tomcat配置仅对嵌入式Tomcat生效,部署到外部容器时,这些配置会被直接忽略。
  • 外部Tomcat的容器级配置是全局生效的,应用的运行端口、线程池、连接超时、SSL设置等都会遵循外部Tomcat的配置。

举个例子:如果application.properties中设置了server.port=8081,但外部Tomcatserver.xml里<Connector>标签的port属性为8080,那么应用最终会在8080端口提供服务。


内容的提问来源于stack exchange,提问作者Tejas S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:55:23