如何通过IntelliJ与Maven配置将SpringBoot应用部署到Tomcat?
SpringBoot 部署到外部 Tomcat 关键环节排查与解决
一、Maven 核心配置(WAR 打包必做)
SpringBoot 默认打 JAR 包并内置 Tomcat,要部署到外部 Tomcat 必须改成 WAR 包,以下配置缺一不可:
- 声明打包类型为 WAR
在 pom.xml 中添加:
<packaging>war</packaging>
- 排除内置 Tomcat(避免与外部 Tomcat 冲突)
给 web starter 添加依赖排除:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
- 添加 Servlet API 依赖(仅编译时生效,Tomcat 自带该依赖)
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
- 主类继承
SpringBootServletInitializer
这是外部 Tomcat 启动 SpringBoot 应用的核心,修改你的主类:
@SpringBootApplication public class MagicVisionApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(MagicVisionApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MagicVisionApplication.class); } }
二、IntelliJ 部署配置(解决文件不迁移问题)
你看不到文件迁移,大概率是 Deployments 标签配置有误,按以下步骤调整:
- 配置本地 Tomcat
打开Run/Debug Configurations,添加Tomcat Server -> Local,选择你本地 Tomcat 的安装目录(例如apache-tomcat-9.0.x)。
- 配置本地 Tomcat
- 配置 Deployments 项
- 点击右侧
+号,选择Artifact,再挑选项目对应的war exploded(开发用,支持热更新)或war(生产打包用)。 - 重点:设置
Application context,比如设为/,则访问localhost:8080直接进入你的应用;若设为/magic-vision,则访问路径为localhost:8080/magic-vision。 - 检查部署路径:点击
Show in Explorer查看 IntelliJ 实际部署路径,正常应指向 Tomcat 的webapps目录下的对应文件夹(如ROOT或项目名文件夹),路径不对则重新选择 Tomcat 安装目录。
- 先构建再启动
先执行Maven -> clean -> package,确保 target 目录生成正确的 WAR 或 exploded 文件夹,再启动 Tomcat,此时文件会自动同步到 Tomcat 部署目录。
- 先构建再启动
三、Thymeleaf 模板位置检查(解决404)
你的控制器返回 home.html,Thymeleaf 默认仅读取 src/main/resources/templates 下的模板文件,需满足:
- 在
src/main/resources下创建templates文件夹,并将home.html放入其中。 - 模板需添加 Thymeleaf 命名空间才能正常渲染,示例:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Home</title> </head> <body> <h1>Hello, <span th:text="${username}"></span>!</h1> </body> </html>
四、快速排查步骤
- 查看 Tomcat 日志:打开
logs/catalina.out,查找是否有Started MagicVisionApplication in X seconds类日志,没有则说明应用未加载,需重新检查打包与部署配置。 - 检查 webapps 目录:查看 Tomcat 的
webapps文件夹中是否存在你的应用目录,没有则说明 IntelliJ 部署未生效,重新配置 Deployments。 - 测试静态资源:在
src/main/resources/static下放置test.html,访问localhost:8080/test.html,能打开则说明 Tomcat 部署正常,问题出在 Thymeleaf 或控制器映射;打不开则说明部署本身存在问题。
内容的提问来源于stack exchange,提问作者Dr Tyrell
相关产品推荐
相关产品推荐

