Java 主流框架 / 中间件 30 组对比表格

Spring 全家桶、ORM、缓存、RPC、定时任务、网关、测试、日志、权限等

1. Spring MVC vs Spring WebFlux

表格

对比维度 Spring MVC Spring WebFlux
编程模型 同步阻塞 Servlet 模型 异步响应式 Reactor/Netty 非阻塞
底层容器 Tomcat/Jetty Servlet 容器 Netty 异步服务器,也可兼容 Servlet
线程模型 一线程一请求,阻塞 IO 少量线程处理大量并发连接
阻塞 API 适配 完美适配 JDBC、同步 RPC 同步阻塞 IO 会耗尽有限线程池
适用场景 传统 CRUD、同步数据库业务、中小并发 高并发网关、大量长连接、流式推送
学习成本 低,Java 开发者通用习惯 高,需掌握响应式编程、背压

2. MyBatis vs MyBatis-Plus

表格

对比维度 原生 MyBatis MyBatis-Plus(MP)
CRUD 能力 仅基础 SQL 映射,通用增删改查需手写 XML 内置 BaseMapper,单表无 SQL 即可 CRUD
分页功能 手动编写分页 SQL、分页参数封装 内置分页插件,自动分页、count 优化
条件构造器 无,全部依赖 XML / 注解 SQL Lambda QueryWrapper,防硬编码字段名
逻辑删除、自动填充 需自行封装拦截器 开箱即用配置,自动填充创建人 / 时间
多表关联 原生友好,XML 灵活多表 join 多表弱支持,复杂关联建议手写 XML
版本兼容 独立框架,无 Spring 绑定 基于 MyBatis 二次封装,无缝兼容 SpringBoot

3. MyBatis vs JPA(Hibernate)

表格

对比维度 MyBatis Spring Data JPA (Hibernate 底层)
SQL 控制权 完全手写 SQL,高度可控,优化方便 自动生成 SQL,复杂 SQL 难调优
学习门槛 中等,熟悉 SQL 即可上手 高,需理解实体映射、持久态、一级缓存
多表复杂查询 优势明显,XML 自由拼接关联 复杂 join、子查询代码繁琐
快速开发 单表重复 CRUD 模板代码多 单表零 SQL,快速实现基础业务
数据库迁移 无自动 DDL,适配多库无兼容坑 自动建表,不同数据库方言易出现字段差异
性能调优 SQL 可见,慢 SQL 快速定位 自动生成 SQL,隐性全表查询难排查

4. Spring Data Redis vs Jedis

表格

对比维度 Spring Data Redis 原生 Jedis
封装程度 高度封装,Template 工具类 原生 Redis 命令 API,无封装
连接池管理 自动集成 Lettuce/Jedis 连接池 需手动配置连接池、资源释放
序列化方案 内置 Jackson、Jdk 序列化,可自定义 仅字符串 / 字节操作,序列化自行实现
响应式支持 Lettuce 底层支持 Reactor 响应式 Jedis 仅同步阻塞
SpringBoot 适配 自动配置,yml 一键配置 需手动创建 JedisPool、销毁资源
分布式锁 无内置工具,自行封装 无分布式锁工具类

5. Lettuce vs Jedis(Redis 客户端)

表格

对比维度 Lettuce Jedis
IO 模型 Netty 异步非阻塞,线程安全 同步阻塞,多线程需多连接 / 池
连接复用 单个连接可多线程共享 多线程共用同一连接会线程不安全
资源开销 长连接,少量连接支撑大量并发 高并发需大量连接,占用端口
响应式 API 原生支持 Reactor 异步调用 仅同步阻塞接口
事务 / 管道 支持异步 pipeline 事务 同步管道、事务
SpringBoot 默认 SpringBoot2.x 默认客户端 SpringBoot1.x 老版本默认

6. Dubbo vs Spring Cloud OpenFeign

表格

对比维度 Dubbo OpenFeign(SpringCloud)
通信协议 自定义 Dubbo 二进制协议,高效 HTTP/JSON 通用协议
注册中心 Nacos/Zookeeper/Apollo Nacos/Eureka/Consul
负载均衡 内置多种均衡、权重灰度 依赖 SpringCloud LoadBalancer
性能 二进制序列化,吞吐量高,延迟低 HTTP 报文头大,性能弱于 Dubbo
跨语言 仅 Java 生态友好,跨语言差 HTTP 标准,支持所有开发语言
网关适配 配套 Dubbo 网关 适配 Spring Cloud Gateway

7. Spring Cloud Gateway vs Zuul1

表格

对比维度 Spring Cloud Gateway Zuul 1.x
底层线程 Netty 异步非阻塞,响应式 同步 Servlet 阻塞一线程一请求
并发能力 支持高并发、长连接、流式推送 并发量高时线程耗尽,性能瓶颈
过滤器模型 GlobalFilter、路由过滤器灵活链式 Pre/Post 简单过滤器,拓展弱
Spring 版本 SpringBoot2、WebFlux 原生适配 仅 SpringBoot1 兼容,已停止维护
内置功能 限流、熔断、重写路径内置 需手动整合 Hystrix 限流熔断
性能 高并发场景吞吐量是 Zuul 数倍 中小并发可用,大流量不推荐

8. Nacos vs Eureka(注册配置中心)

表格

对比维度 Nacos Eureka
核心能力 注册中心 + 分布式配置中心二合一 仅服务注册发现,无配置管理
一致性算法 AP+CP 切换,支持持久化 纯 AP 设计,保证可用性,无强一致
权重灰度 原生支持权重、灰度路由 无原生灰度,需自行拓展
持久化 MySQL 持久化实例、配置信息 内存存储,重启数据丢失
监控告警 内置服务健康监控、推送变更 仅基础健康检查,无推送机制
生态适配 Dubbo、SpringCloud 双生态兼容 仅 SpringCloud 生态

9. Nacos vs Apollo(配置中心)

表格

对比维度 Nacos Apollo
功能范围 配置中心 + 注册中心一体 专注分布式配置中心,无注册功能
权限管控 基础命名空间权限,简单 精细化项目、环境、用户角色权限
灰度发布 简易灰度,按 IP / 权重 精准灰度、分批发布、回滚记录完整
存储介质 MySQL 存储配置 多数据库分层存储,隔离性更强
变更推送 长连接实时推送配置变更 长连接推送,推送日志完整审计
运维复杂度 部署简单,单服务启动 组件多(Portal/Admin/Config)运维成本高

10. Hystrix vs Resilience4j(熔断降级)

表格

对比维度 Hystrix Resilience4j
维护状态 Netflix 停止维护,不再更新 持续活跃更新,SpringCloud2 主推
底层依赖 RxJava1 老旧版本 基于 Java8 函数式,轻量无重型依赖
功能组件 熔断、限流、降级、隔离舱 熔断、限流、重试、超时、信号量隔离
线程模型 独立线程池隔离,开销大 信号量隔离为主,资源消耗低
Spring 适配 SpringCloud1 默认组件 SpringCloud2 官方推荐,适配 WebFlux
体积 依赖包庞大,冗余类多 轻量化,极小依赖体积

11. Quartz vs XXL-Job(定时任务)

表格

对比维度 Quartz 原生框架 XXL-Job 分布式定时任务
部署模式 单机 / 集群数据库锁,无统一控制台 中心化调度平台,Web 可视化控制台
运维操作 代码 / 数据库修改任务,无界面 页面新增、启停、重试、日志查看
分布式防重 依赖数据库锁表实现,性能差 中心化调度,天然分片、广播任务
失败策略 自行编写失败重试、告警逻辑 内置失败重试、邮件 / 钉钉告警
执行日志 需自行记录入库 持久化完整执行日志,检索分页
接入成本 原生 API 繁琐,需配置表结构 SpringBoot 一键 starter,零配置快速接入

12. JUnit 4 vs JUnit 5(Jupiter)

表格

对比维度 JUnit4 JUnit5
架构设计 单体耦合框架 模块化分层:平台、引擎、API 解耦
注解体系 @Test、@Before、@After 老旧注解 全新 @BeforeEach、@BeforeAll 等标准化注解
扩展机制 运行 Rule 拓展能力弱 Extension 强大拓展模型,替代 Rule
Java 版本 兼容 Java5+ 最低 Java8,支持 Lambda、流式断言
参数化测试 第三方依赖 原生内置参数化测试
Spring 整合 SpringTest 老旧适配 Spring 6 原生深度适配,支持 WebFlux 测试

13. Logback vs Log4j2(日志框架)

表格

对比维度 Logback Log4j2
性能 同步日志性能优秀,轻量 异步零垃圾 GC,高并发吞吐量更高
依赖关系 Slf4j 原生实现,作者同源 独立实现,桥接适配 Slf4j
配置文件 xml/groovy 简洁配置 xml/json/yaml 多格式,插件丰富
异步模型 阻塞队列异步 无锁 RingBuffer 异步,低延迟
内存开销 轻量,低内存占用 高并发场景内存优化更好
漏洞风险 历史无高危远程漏洞 旧版存在远程代码执行漏洞,需升级

14. Spring Security vs Shiro(权限框架)

表格

对比维度 Spring Security Apache Shiro
Spring 适配 Spring 全家桶原生深度集成 兼容 Spring,适配度弱于 Security
功能完整性 OAuth2、OIDC、RBAC、会话管理一体化 基础认证授权,OAuth 需自行拓展
并发会话控制 原生踢人、在线会话管控 会话管理需手动封装
学习成本 高,大量过滤器链概念 低,API 简洁易懂,上手快
前后端分离 原生支持 Token、JWT 适配 无原生 JWT,需自定义过滤器
性能 过滤器链路多,轻微损耗 轻量,拦截链路简单

15. JWT vs Session(前后端认证)

表格

对比维度 JWT 无状态令牌 服务端 Session 会话
存储位置 全部信息存储客户端 Token 会话数据存储服务端内存 / Redis
分布式 天然分布式,无需共享存储 分布式需 Redis 共享 Session
过期控制 Token 内置过期时间,无法主动失效 服务端可手动销毁会话、踢下线
带宽消耗 每次请求携带完整载荷,报文更大 仅传输简短 SessionId,体积小
数据安全 载荷明文存储敏感信息不可放 敏感数据存在服务端,更安全
刷新机制 需单独刷新 Token 接口 服务端自动续期,无需额外接口

16. Elasticsearch vs Redis(检索缓存)

表格

对比维度 Elasticsearch Redis
核心定位 全文检索、复杂聚合分析 内存 KV 高速缓存、临时存储
查询能力 分词、模糊、范围、聚合、分组 仅简单 key/Hash/ZSet 基础查询
持久化 磁盘持久化,海量数据存储 RDB/AOF 持久化,不适合亿级海量文本
写入延迟 磁盘写入,延迟相对高 纯内存操作,读写纳秒级延迟
分片扩容 原生分布式分片集群 Redis Cluster 分片集群,仅 KV 分片
适用场景 日志检索、商品模糊搜索、报表统计 热点缓存、分布式锁、限流计数器

17. RabbitMQ vs Kafka(消息中间件)

表格

对比维度 RabbitMQ Apache Kafka
底层模型 交换机、队列、绑定,灵活路由 分区日志流模型,简单分区存储
吞吐量 万级吞吐量,适合复杂路由 百万级高吞吐,海量日志首选
可靠性 完善生产者 / 消费者确认机制,消息不丢 副本同步刷盘保证高可靠
延迟队列 原生支持延迟消息插件 无原生延迟,依赖时间轮方案
消息堆积 大量堆积内存暴涨易 OOM 磁盘顺序存储,百万堆积无压力
适用场景 业务异步通知、订单复杂路由、延迟任务 日志采集、大数据流、高吞吐异步解耦

18. EasyExcel vs POI(Excel 解析导出)

表格

对比维度 Alibaba EasyExcel Apache POI
内存模型 逐行 SAX 流式读取,低内存 一次性加载全 Sheet 到内存,大数据 OOM
大数据支持 十万 / 百万行无堆溢出风险 上万行极易堆内存溢出
API 简洁度 极简注解绑定实体,开箱即用 大量底层 Workbook/Sheet 模板代码
性能 读写速度快,GC 压力小 内存开销大,频繁 GC 卡顿
功能拓展 自定义转换器、合并单元格完善 底层功能全面,拓展代码量大
版本坑 版本稳定,坑少 旧版存在内存泄漏、公式计算 bug

19. Hutool vs Guava(工具类)

表格

对比维度 Hutool Google Guava
语言生态 国产 Java 全场景工具,贴合国内业务 Google 开源通用基础工具库
覆盖范围 加密、文件、Excel、验证码、线程池、日期 集合、缓存、并发、基础字符串
中文适配 完美支持中文、中文日期、中文加密 对中文无特殊优化
依赖体积 整合大量工具,包体积更大 轻量化,专注基础底层工具
更新维护 国内持续高频更新,适配国产框架 稳定低频更新,API 极少变动
企业场景 中小型业务项目一站式工具 底层基础组件、开源中间件通用依赖

20. Swagger2 vs Knife4j(接口文档)

表格

对比维度 Springfox Swagger2 Knife4j (Swagger 增强 UI)
底层依赖 原生 Swagger 规范实现 基于 Swagger OpenAPI 二次封装增强
UI 界面 基础简陋页面,无增强功能 离线文档、全局搜索、导出 Markdown
认证支持 基础 token 参数配置 全局认证一键填充,调试更友好
SpringBoot 适配 高版本 SpringBoot 存在兼容 bug 持续更新适配 SpringBoot3、JDK17
生产防护 无原生接口屏蔽配置 支持生产环境关闭文档入口
拓展功能 拓展能力弱 字典枚举解析、离线文档下载

21. Redisson vs 原生 RedisTemplate 分布式锁

表格

对比维度 Redisson Spring Data RedisTemplate 手动实现锁
锁实现 封装 Lua 脚本,可重入锁、读写锁、红锁 自行编写 Lua,仅简易互斥锁
自动续期 看门狗自动续期防死锁 无自动续期,业务超时直接锁失效
失效防死锁 锁释放兜底,避免宕机永久持有锁 宕机则锁永久存在,需设置过期时间
代码侵入 一行 API 获取锁,简洁 大量 Lua 脚本、过期时间、释放模板代码
分布式方案 单机锁、主从红锁、集群锁齐全 仅支持单机 Redis,集群锁实现复杂

22. PageHelper MP 分页 vs 原生 MyBatis 分页

表格

对比维度 PageHelper MyBatis-Plus 内置分页插件
使用方式 ThreadLocal 存储分页参数,静态方法 Lambda 分页参数,绑定 Mapper 查询
多数据源 多数据源需手动清理分页参数 多数据源自动隔离,无污染
count 优化 支持 countSql 自定义优化 自动识别 join,优化 count 语句
Lambda 支持 无 Lambda 条件构造器 QueryWrapper 链式 Lambda 条件分页
嵌套分页 嵌套查询易出现分页错乱 多层嵌套分页兼容性更好
维护状态 独立开源分页插件 MP 内置,随 MP 统一更新维护

23. Flyway vs Liquibase(数据库版本管理)

表格

对比维度 Flyway Liquibase
脚本格式 原生 SQL 脚本,上手简单 XML/YAML/JSON/SQL 多格式变更集
学习成本 极低,直接写业务 SQL 高,需学习专用变更标签语法
回滚能力 仅清理,无精准版本回滚 支持指定版本回滚、变更追溯
复杂 DDL 原生 SQL 适配所有数据库方言 统一语法自动适配多数据库
企业规范 适合中小项目简单版本迭代 多环境、多数据库复杂适配大型项目

24. SpringDoc OpenAPI3 vs Springfox Swagger2

表格

对比维度 SpringDoc OpenAPI Springfox Swagger2
OpenAPI 规范 兼容 OpenAPI3 最新标准 仅兼容老旧 OpenAPI2
SpringBoot3/JDK17 原生完美支持 停止维护,完全不兼容高版本
注解体系 复用 Jakarta 新注解 依赖过时 javax 包,高版本报错
依赖维护 持续迭代更新,无兼容 bug 长期停止更新,大量兼容性问题
响应类解析 自动识别泛型、嵌套 DTO 泛型、复杂泛型解析失效

25. Seata TCC vs AT 模式(分布式事务)

表格

对比维度 Seata AT 模式 Seata TCC 模式
代码侵入 极低,仅 @GlobalTransactional 注解 侵入极高,需编写 Try/Confirm/Cancel 三阶段接口
实现原理 自动拦截 SQL 生成 undo_log 回滚日志 手动编写资源预留、确认、补偿逻辑
适配场景 普通单库 CRUD、无复杂资源锁定 库存冻结、资金预留等强隔离业务
隔离级别 全局读未提交,存在脏读风险 自定义隔离逻辑,隔离性可控
开发速度 快速接入,零业务改造 开发量大,开发周期长

26. Sa-Token vs Spring Security(轻量权限)

表格

对比维度 Sa-Token Spring Security
接入成本 极低,yml 简单配置开箱即用 大量过滤器、配置类,学习曲线陡
功能范围 登录认证、权限、单点登录、防重放、JWT 一体化 认证授权基础能力,单点需整合 OAuth2
前后端分离 原生适配无状态 Token,自动跨域 跨域、Token 需大量自定义配置
依赖体积 轻量化,极小第三方依赖 依赖 Spring 全家桶,包体积庞大
微服务 原生支持分布式会话、网关鉴权 分布式会话需整合 Redis/Session 共享

27. Druid vs HikariCP(数据库连接池)

表格

对比维度 Druid 阿里连接池 HikariCP SpringBoot 默认池
性能优化 内置监控、防 SQL 注入过滤器 极致轻量化,零开销高性能
监控面板 内置 Web 监控页面,SQL 慢查询统计 无内置监控,需自行埋点
过滤拓展 支持 SQL 拦截、防火墙、日志过滤 仅基础连接管理,拓展能力弱
内存占用 功能多,内存开销略高 极简设计,内存占用极低
并发性能 高并发稳定,防泄漏 并发吞吐量业界顶尖,无锁设计
SpringBoot 需手动引入依赖配置 Boot2 默认内置,自动装配

28. Actuator Spring 监控 vs Prometheus Micrometer

表格

对比维度 Spring Boot Actuator Micrometer + Prometheus
数据输出 HTTP 端点 JSON 格式 标准 Prometheus 指标格式,时序数据库适配
可视化 仅基础端点,无图表展示 搭配 Grafana 大盘、告警规则完整监控体系
指标类型 基础 JVM、线程池、HTTP 请求指标 计数器、计时器、直方图多维度指标
告警能力 无原生告警机制 Prometheus AlertManager 配置告警推送
微服务 单机监控为主 集群统一指标收集,分布式监控首选

29. MapStruct vs BeanUtils(实体转换)

表格

对比维度 MapStruct Spring BeanUtils / Hutool BeanUtil
实现原理 编译期生成转换实现类,无反射 运行时反射赋值,性能差
性能 接近手动 get/set,无反射损耗 大量反射,循环转换 GC 压力大
类型校验 编译期类型不匹配直接报错 运行时才抛出转换异常,难以提前发现
自定义转换 注解自定义转换器,编译生效 运行时自定义转换器,代码繁琐
空值处理 编译配置全局空值策略 运行时空值易空指针,需手动判空

30. Canal vs DataX(数据同步中间件)

表格

对比维度 Canal DataX
同步原理 监听 MySQL binlog 增量同步 全量 / 增量定时读取数据库批量同步
实时性 毫秒级实时数据同步 定时任务,分钟级延迟
数据量 适合增量实时同步,增量变更 海量全量数据离线迁移,批量导入
数据源 仅适配 MySQL binlog MySQL/Oracle/ES/FTP 多数据源互相同步
资源消耗 低,仅监听日志无查询压力 全量查询占用数据库 IO、CPU
业务场景 缓存更新、分库同步、实时数据推送 离线数仓同步、历史数据迁移