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

Spring应用生产环境端点暴露及部署相关技术咨询

问题解答

1. SpringBoot应用生产环境中内嵌Tomcat的作用

  • 作为核心Web容器处理请求:生产环境下,内嵌Tomcat负责监听指定端口(默认8080),接收客户端的HTTP请求,将请求转发给SpringBoot应用内的RestController完成业务处理,再把处理后的响应返回给客户端,功能和独立部署的Tomcat完全一致。
  • 简化部署与运维:无需单独安装、配置外部Tomcat服务器,直接运行SpringBoot生成的可执行JAR包就能启动整个Web服务,大幅降低生产环境的部署复杂度和运维成本。
  • 保障环境一致性:开发、测试、生产环境复用同一套Tomcat内核,避免因外部容器版本差异引发的兼容性问题。
  • 支持灵活配置:可通过application.properties或application.yml直接配置Tomcat的端口、线程池大小、连接超时时间等参数,无需修改外部Tomcat的配置文件。

2. 非SpringBoot的Spring应用暴露API的步骤

为什么需要Tomcat这类依赖?

Spring核心框架仅提供IoC、AOP等基础功能,本身不具备Web容器能力,无法监听HTTP端口、处理HTTP请求。Tomcat(或Jetty、Undertow)作为Servlet容器,是外部HTTP请求与Spring应用之间的桥梁,负责将HTTP请求转换为Servlet请求,交给Spring的DispatcherServlet处理,再将响应返回给客户端。

具体实现步骤

  • 添加Servlet容器依赖:在项目构建文件中添加Tomcat的内嵌依赖,以Maven为例:
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.80</version> <!-- 选择适配项目的版本 -->
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-logging-juli</artifactId>
    <version>9.0.80</version>
</dependency>
  • 初始化Spring Web上下文:创建WebApplicationContext并加载Spring配置类或XML配置:
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(YourSpringConfig.class); // 替换为你的Spring配置类
  • 配置Spring MVC核心DispatcherServlet:DispatcherServlet负责路由请求到对应Controller,需将其注册到Tomcat中:
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
  • 启动内嵌Tomcat并配置映射:编写代码启动Tomcat,设置端口、上下文路径,将DispatcherServlet映射到指定路径:
Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);
tomcat.getHost().setAppBase(".");

Context tomcatContext = tomcat.addContext("/", null);
Tomcat.addServlet(tomcatContext, "dispatcherServlet", dispatcherServlet);
tomcatContext.addServletMappingDecoded("/*", "dispatcherServlet");

tomcat.start();
tomcat.getServer().await();
  • 编写Controller暴露API:创建带有@RestController(或@Controller)注解的类,用@RequestMapping系列注解配置路由:
@RestController
public class ApiController {
    @GetMapping("/api/data")
    public String getData() {
        return "Hello from non-SpringBoot Spring API";
    }
}
  • 启动应用:执行包含Tomcat启动逻辑的主类,即可通过http://localhost:8080/api/data访问API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:52:42