2014 年 Spring Boot 发布,内嵌 Tomcat 被当作一个重大进步广泛传播。
不用再配置外部容器,不用再打 WAR 包,一个 JAR 直接跑。
确实方便了。
但没有人提过另一面:
Spring Boot 把 Web 服务层和你的业务代码,绑得更死了。
一个被忽略的角色变化
Spring Boot 之前,Tomcat 是"部署目标"——你的应用部署到它上面,两者是独立的。
Spring Boot 之后,Tomcat 变成了"运行依赖"——它被打进你的 JAR,跟你的业务代码一起发布,一起启动,一起出问题。
这个角色变化,让 Web 服务层从此变得更难被替换。
你以为内嵌容器是解放,其实是把一个本来可以解耦的东西,绑死在了一起。更麻烦的是,绑死的同时,还带来了一个巨大的包。
一个 Hello World 级别的 Spring Boot 应用,打出来的 JAR 通常在 17-20MB。
你的业务代码可能只有几十 KB,剩下的全是 Spring Boot 和 Tomcat 带进来的东西。
另一种思路:边界清晰,按需组合
smart-servlet 的完整依赖包,算下来约 1.3MB。
不是因为功能少,是因为每一层只做自己该做的事:
网络层、Web 服务核心、Servlet 适配,三层边界清晰,没有一层是多余的。
冷启动低于 100ms,支持 HTTP/1.1、HTTP/2.0、WebSocket、SSE,云原生友好。
同时,因为严格实现 Servlet 6.1 规范,兼容性接近 100%——你的业务代码、Filter 链、web.xml 配置,一行不动。
1.3MB 对 20MB,不是功能的差距,是架构思路的差距。
对企业来说,这个差距意味着什么
存量系统迁移:Web 服务层和业务代码之间有了清晰边界,迁移可以只动 Web 服务层,业务代码零改动。那些评估了两年没动的迁移计划,可以重新算一遍成本了。
信创 / 国产化适配:不依赖商业容器厂商的支持周期,Web 服务层自主可控,可以针对国产硬件和操作系统做针对性适配。
运维排查:Web 服务层不再是黑盒,连接管理、线程调度、协议处理都在可掌握的范围内,出了问题知道去哪查。
v3.2 刚发布,这次更新集中在 Feat 和 smart-socket 的稳定性提升。 轻量不是目的,可靠才是。
* 加入我们
感谢每一位使用 smart-servlet 的开发者!你的 Star ⭐ 是我们持续迭代的动力。