Spring Boot独立Jar应用是否支持类似Tomcat的Parallel Deployment特性?
Spring Boot独立Jar部署的并行会话处理方案
核心问题解答
以独立Jar包形式部署的Spring Boot应用,默认没有Tomcat那种Parallel Deployment特性——因为内嵌容器的独立Jar运行在单独JVM进程中,无法在同一个端口下让新旧版本同时处理不同会话。
替代实现方式
- 外置会话存储+灰度路由:将会话数据存储到Redis、MongoDB等外部存储(通过Spring Session配置,比如设置
spring.session.store-type=redis),再用Nginx这类反向代理做灰度转发:新请求直接路由到新版本应用,旧会话则根据Cookie中的会话ID匹配到旧版本实例,直到旧会话自然过期或用户退出。 - 蓝绿部署:同时运行新旧两个版本的应用实例,通过负载均衡器控制流量走向。初始阶段所有流量走旧版本,部署完成新版本后,将新请求切换到新版本,待旧版本上的所有会话处理完毕后,再关停旧实例。这种方式需要额外资源支撑双实例运行,但能实现零停机更新。
- 滚动更新+会话粘性:如果用K8s等容器编排工具,开启滚动更新时,配置
terminationGracePeriodSeconds给旧实例预留足够的会话处理时间;同时配合负载均衡的会话粘性策略,确保已有的旧会话持续路由到旧实例,新会话分配给新实例,待旧实例处理完所有请求后自动销毁。
内容的提问来源于stack exchange,提问作者Gabriel Belingueres
相关产品推荐
相关产品推荐

