在Tomcat部署SpringBoot REST API时jacksonObjectMapperBean创建失败
把Spring Boot REST API部署到外部Tomcat(Java 8 + STS 3.9 + Maven)
我来帮你梳理下把Spring Boot编写的REST API部署到外部Tomcat服务器的完整步骤,结合你给出的环境规格:
1. 核心前提说明
Spring Boot默认是内嵌Tomcat的JAR包,要部署到外部Tomcat,必须把项目改成WAR打包格式,同时调整依赖和启动类配置。
2. 调整pom.xml配置
你给出的pom.xml内容不完整,我来补充关键的配置项:
2.1 修改打包方式
首先在pom.xml里指定打包为war:
<packaging>war</packaging>
2.2 排除内嵌Tomcat依赖
避免和外部Tomcat的Servlet容器冲突,同时添加Tomcat Servlet API的依赖(仅编译时生效):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除Spring Boot自带的内嵌Tomcat --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Tomcat Servlet API依赖,scope设为provided表示Tomcat会提供这个包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
2.3 配置Spring Boot Maven插件
确保打包时正确处理Spring Boot的结构,指定你的启动类:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 替换成你自己的启动类全路径 --> <mainClass>com.xxxx.YourApplicationClassName</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
3. 修改Spring Boot启动类
让你的启动类继承SpringBootServletInitializer,并重写configure方法,这样外部Tomcat才能正确加载Spring Boot应用:
package com.xxxx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class YourApplicationClassName extends SpringBootServletInitializer { // 重写configure方法,指定启动类 @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplicationClassName.class); } // 保留原有的main方法,方便本地运行测试 public static void main(String[] args) { SpringApplication.run(YourApplicationClassName.class, args); } }
4. 在STS 3.9中打包部署
按照以下步骤操作:
- 右键你的项目 →
Run As→Maven clean,清理之前的构建文件 - 再次右键项目 →
Run As→Maven install,构建生成WAR包 - 构建完成后,在项目的
target目录下找到生成的xxxx.war文件(xxxx是你的artifactId) - 将这个WAR包复制到Tomcat服务器的
webapps目录下 - 启动Tomcat,服务器会自动解压并部署这个WAR包
5. 验证API访问
部署完成后,访问API的地址格式为:http://localhost:8080/[WAR包名称]/[你的API接口路径]
比如你的WAR包是xxxx.war,API接口是/greet,那么访问地址就是:http://localhost:8080/xxxx/greet
额外注意事项
- 确保你使用的Tomcat版本支持Java 8,推荐用Tomcat 8.x或9.x(Tomcat 7也兼容,但8.x更适配Spring Boot)
- 检查STS的JRE配置是Java 8,避免编译时版本不一致
- 如果你的项目有其他自定义依赖,确保没有和Tomcat容器冲突的包
内容的提问来源于stack exchange,提问作者mike.tihonchik
相关产品推荐
相关产品推荐

