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
相关产品推荐
相关产品推荐

