2025 年底 Spring Boot 技术选型

一、推荐版本组合总览

这一段可以直接复制到你项目的 README / 技术选型说明里。

组件/层级推荐版本(大版本 + 示例小版本)说明
JDKJava 21 LTS(例:Eclipse Temurin 21.x)Java 21 是 2023-09 发布的 LTS 版本,主流厂商会长期支持。
Spring Boot3.5.x(例:3.5.7)3.5.7 已正式 GA,包含大量 bugfix 与依赖升级;系统要求:Java ≥17,兼容至 Java 25,Maven ≥3.6.3。
Maven3.9.x(例:3.9.11)Maven 官方当前维护的 GA 主线,Spring Boot 官方要求 Maven ≥3.6.3,3.9.11 属于最新稳定版本之一。
MyBatis-Plus3.5.x(例:mybatis-plus-spring-boot3-starter 3.5.14MvnRepository 显示 3.5.14 为最新正式版,官方文档也说明 3.5.9+ 做过插件拆分与完善,适配 Spring Boot 3 成熟。
Redis 服务端Redis 7.2.x / 7.4.x 或官方最新稳定版Redis 官网推荐通过 redis-stable 获取最新稳定分支;2025 年 Redis 8.2.2 修复了严重的 Lua RCE 漏洞,没法及时升级时要禁用 EVAL/EVALSHA。
Spring Data Redis随 Spring Boot 3.5.x 自带版本(Spring Data 2025.0.x 系列)Spring Data 2025.0 是 3.5 系列默认绑定的 release train,官方定位为 Spring Data 3.5。
Elasticsearch8.18.x(例:8.18.8)Spring Data Elasticsearch 版本矩阵给出:Spring Data ES 5.5.x ↔ Elasticsearch 8.18.8,并包含安全修复。
Spring Data Elasticsearch随 Spring Boot 3.5.x 自带的 5.5.x已在 Spring Data 2025.0 中指定,对 ES 8.18.x 做了官方适配。
RocketMQ 服务端5.3.x(例:5.3.2)官方已发布 5.3.x,多轮修复并增强 POP/定时消息等;适合新项目直接上 5.x 线。
RocketMQ Spring Boot 客户端rocketmq-v5-client-spring-boot-starter 2.3.x(例:2.3.4)这是专为 RocketMQ 5.x 的 Spring Boot Starter,2.3.4 为最新稳定小版本。
Docker Engine(服务器端)采用发行版仓库中的 27.x / 28.x 稳定版,避免立刻全线上 29.029.0.0 刚发布,官方文档和社区反馈都提醒要注意 API 变更,建议生产环境先固定在已验证的 27/28 线,再评估升级。
Docker Desktop(开发机)≥4.44.3,推荐 4.50+4.44.3 修复了严重的 SSRF 高危漏洞(CVE-2025-9074),4.50 在此基础上又带来调试和安全增强。
OpenResty(Nginx + Lua 网关)1.27.1.x(例:1.27.1.2)OpenResty 官网和 GitHub releases 显示 1.27.1.2 为最新稳定版本之一,官方 Docker 镜像也已提供对应标签。

实际落地时:固定“主版本线”,小版本尽量跟到该线最新的补丁版,例如 Spring Boot 3.5.* / ES 8.18.* / Redis 7.2.*,既吃到安全补丁,又不频繁换大版本。


二、兼容性核心思路

1. JDK 21 LTS + Spring Boot 3.5.x

  • JDK 21 是 2023-09 发布的 LTS 版本,官方说明它是 Java SE 21 的参考实现,绝大多数发行商都会长期提供支持。
  • Spring Boot 3.5.7 的系统要求里明确:最低 Java 17,兼容到 Java 25,并支持 Maven ≥3.6.3。

结论:以 Java 21 + Spring Boot 3.5.x 为后端基线,既能用上现代语言特性,又在官方支持窗口内,版本关系非常干净。


2. Spring Boot 3.5.x 自带的 Spring Data 家族

Spring 官方博客说明:Spring Data 2025.0.0 是 Spring Data 3.5 的 release train,而 Spring Boot 3.5 会默认升级到 2025.0.x,后续还有 2025.0.4、2025.0.6 等服务小版本。

在 Spring Data Elasticsearch 的版本矩阵中可以看到这一行:

  • Spring Data Release Train 2025.0
  • Spring Data Elasticsearch 5.5.x
  • 对应 Elasticsearch 8.18.8
  • 使用 Spring Framework 6.2.x

所以,只要你:

  1. 项目整体基于 Spring Boot 3.5.x
  2. 不手动覆盖 spring-data-* 的版本(用 Boot 的 BOM 管理);

那 Redis / Elasticsearch / 其他 Spring Data 组件之间的版本兼容基本由官方帮你兜底。


3. Redis:选择“稳定 + 打完补丁”的版本

  • Redis 官网一贯的建议是:通过 redis-stable 获取最新稳定版。
  • 2025 年曝光的 CVE-2025-49844(RediShell)影响了所有带 Lua 的版本,修复出现在 Redis 8.2.2,安全公告建议无法立即升级时通过 ACL 禁用 EVAL / EVALSHA

实践上可以这么选:

  1. 保守稳妥
    • 选发行版仓库中维护的 Redis 7.2.x / 7.4.x,确认已经 back-port 了 CVE-2025-49844 的补丁。
  2. 追新且可控
    • 直接使用官方二进制的 8.2.2+ 版本,并配合严格的 ACL + 不对公网暴露。

Spring 侧:

  • Spring Data Redis 的版本跟着 Spring Boot 3.5.x 自动走 Spring Data 2025.0.x,即 3.5/4.0 这一代,对 Redis 6/7 已经适配成熟。

4. Elasticsearch 8.18.x + Spring Data Elasticsearch 5.5.x

Spring Data ES 版本矩阵给出官方配对关系:Spring Data ES 5.5.x 就是为 Elasticsearch 8.18.8 做的适配

而 Spring Boot 3.5 绑定的 Spring Data 2025.0.x 正是包含 ES 5.5.x 的 release train。

因此:项目只要用了 Spring Boot 3.5.x,spring-boot-starter-data-elasticsearch 不写 version,ES 服务器跑 8.18.x,就是官方推荐的一整套组合。


5. RocketMQ 5.3.x + rocketmq-v5-client-spring-boot-starter 2.3.x

  • RocketMQ 官方在 2024–2025 年连续发了 5.2.0、5.3.0、5.3.2 等版本,Release Notes 中强调对 POP 消费、定时消息、存储等做了大幅改进和修复。
  • RocketMQ Spring 侧则在 2.3.x 线持续维护,2024-07 发布了 2.3.1,适配 Spring Boot 3.x。
  • 新的 rocketmq-v5-client-spring-boot-starter 则专门为 5.x 客户端设计,Maven 中 2.3.4 为当前最新版。

新项目没有历史负担时,推荐:
RocketMQ 5.3.x + rocketmq-v5-client-spring-boot-starter:2.3.4,直接拥抱 5.x 的特性与生态。


6. MyBatis-Plus 3.5.x

  • mybatis-plus-spring-boot3-starter 当前最新版本为 3.5.14
  • 官方文档提到从 3.5.9+ 开始对插件部分做了拆分,配套 BOM,更利于在 Spring Boot 3 项目中精细选择插件。

简单说:只要用 Boot 3,就直接上 MyBatis-Plus 3.5.x 的 Boot3 Starter,填一个最新小版本就行,几乎没啥版本坑。


7. Docker:服务器端稳一点,开发机跟新一点

  • Docker Engine 29.0.0 刚发布,官方说明这是“最新变更”的一大版本;同时社区反馈提到其 API 版本变化会让某些依赖 Docker API 的工具(如 Traefik、Portainer 等)不兼容,需要谨慎升级。
  • 针对 Docker Desktop,2025 年曝出过一个 Windows / macOS 高危 SSRF 漏洞(CVE-2025-9074),Docker 在 4.44.3 中修复;此后 4.50 又在调试体验和安全控制上做了增强。

推荐策略:

  • 服务器端(测试 / 生产)
    • 优先使用 Linux 发行版仓库中维护的 Docker Engine 27.x / 28.x 稳定版,或厂商提供的企业版;
    • 不要盲目跟 latest 或刚出的 29.x,先在预发环境评估兼容性。
  • 开发机(Windows / macOS)
    • Docker Desktop 一律升级到 ≥4.44.3,推荐直接用 4.50+ 版本;
    • 避免长期停在已知有高危漏洞的旧版本。

8. OpenResty 1.27.1.x:作为 Spring Boot 单体的前置网关

8.1 版本选择

  • OpenResty 官网公告显示 1.27.1.2 为最新发布版本之一,很接近 Nginx 主线,并整合 LuaJIT 等组件。
  • 官方 Docker 镜像 openresty/openresty 已同步提供对应标签,并建议 固定到具体 tag,而不是长期使用 latest

推荐:

  • 裸机 / VM:安装 OpenResty 1.27.1.2
  • Docker:使用 openresty/openresty:1.27.1.2-*-bookworm 等明确 tag。

8.2 为什么单体项目也值得加 OpenResty?

即使是单体 Spring Boot 项目,还是建议用 OpenResty 做一个轻量前置层:

  1. TLS / HTTP/2 / 证书管理
    • 把 HTTPS 终止在 OpenResty,后端 Spring Boot 只跑 HTTP,证书自动续期走 acme.sh / certbot 即可。
  2. 静态资源与缓存
    • 静态文件(前端静态页、文档、文件下载)直接由 OpenResty 提供,减轻 Java 进程压力。
  3. 反向代理 & 路由
    • 方便后续逐步拆分模块 / 灰度发布,不用改客户端地址。
  4. Lua 扩展能力
    • 可以在网关层做简单限流、埋点、灰度控制,而不必在 Java 里重复造轮子。

8.3 典型反向代理配置示例

假设 Spring Boot 在容器中监听 8080,OpenResty 对外暴露 80/443

# nginx.conf 中的简化示例
worker_processes auto;
events {
    worker_connections  1024;
}

http {
    # 基础优化略…

    upstream app_backend {
        server app:8080;  # docker-compose 里的 springboot 服务名
    }

    server {
        listen 80;
        server_name example.com;

        # 生产环境建议强制跳转 HTTPS
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name example.com;

        ssl_certificate     /etc/ssl/certs/fullchain.pem;
        ssl_certificate_key /etc/ssl/private/privkey.pem;

        location / {
            proxy_pass http://app_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # 静态资源可以单独 location,直接由 OpenResty 提供
        location /static/ {
            root /var/www;
        }
    }
}

这种架构里,OpenResty 与 Spring Boot 之间只是 HTTP 协议,对版本兼容基本无压力,只要:

  • OpenResty 选用 1.27.1.x 稳定线
  • Docker / 操作系统层保持定期安全更新即可。

三、推荐项目骨架(带版本约束的 pom.xml 片段)

Java 21 + Spring Boot 3.5.7 为例,后端技术栈骨架可以写成这样:

<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.7</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>demo-monolith</artifactId>
    <version>1.0.0</version>
    <name>demo-monolith</name>

    <properties>
        <java.version>21</java.version>

        <!-- 非 Spring 官方管理的三方库,单独声明版本 -->
        <mybatis-plus.version>3.5.14</mybatis-plus.version>
        <rocketmq.v5.spring.version>2.3.4</rocketmq.v5.spring.version>
    </properties>

    <dependencies>
        <!-- Web 基础 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Redis(版本由 Spring Boot & Spring Data 管理) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- Elasticsearch(同样走 Boot 的 BOM 管理) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <!-- RocketMQ 5.x Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-v5-client-spring-boot-starter</artifactId>
            <version>${rocketmq.v5.spring.version}</version>
        </dependency>

        <!-- MyBatis-Plus for Spring Boot 3 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!-- 其他如数据库驱动、验证、日志按需添加 -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

四、简单的 Docker / OpenResty 编排示例

version: "3.8"

services:
  app:
    image: your-registry/your-app:1.0.0
    container_name: demo-app
    environment:
      - JAVA_OPTS=-Xms512m -Xmx512m
    ports:
      - "8080:8080"
    depends_on:
      - redis
      - es
      - rocketmq

  redis:
    image: redis:7.2
    container_name: redis
    command: ["redis-server", "--appendonly", "yes"]
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
    restart: always

  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.18.8
    container_name: es
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports:
      - "9200:9200"
    volumes:
      - ./data/es:/usr/share/elasticsearch/data
    restart: always

  rocketmq:
    image: apache/rocketmq:5.3.2
    container_name: rocketmq
    # 这里仅作示意,生产通常会拆成 namesrv / broker 多容器
    ports:
      - "9876:9876"
    restart: always

  openresty:
    image: openresty/openresty:1.27.1.2-0-bookworm
    container_name: openresty
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro
      - ./certs:/etc/ssl:ro
      - ./www:/var/www:ro
    depends_on:
      - app
    restart: always

五、落地时的几个“小经验”

  1. 统一用 BOM 管理版本

    • Spring Boot / Spring Cloud / 公司自建 BOM 负责锁住主版本,业务模块只管写 starter 名字;
    • 对 Redis / ES / RocketMQ 这种“外部服务”,在 ops 层统一选版本。
  2. 固定主版本线,不追最新大版本

    • 例如:Boot 固定 3.5.x、ES 固定 8.18.x、Redis 固定 7.2.x/7.4.x、OpenResty 固定 1.27.1.x;
    • 小版本可以靠 Renovate、Dependabot 定期发 PR,CI 过了再合并。
  3. 安全优先

    • 关注 Redis / Docker Desktop 这类基础组件的安全公告(CVE-2025-49844、CVE-2025-9074 等),尽量跑在含补丁的小版本上。
  4. OpenResty 与 Spring Boot 解耦

    • 网关层永远只感知 HTTP/HTTPS,后端升级 Spring / JDK 都无需动 OpenResty 配置;
    • 只要遵守约定的路由前缀 / 健康检查接口,就能做到“网关稳定、后端可滚动升级”。

六、总结:一套“比较不折腾”的组合

如果你 2025 年下半年要启动一个新的 Spring Boot 单体项目,可以考虑直接采用:

  • JDK: Java 21 LTS
  • Spring Boot: 3.5.x(例:3.5.7)
  • 持久层: MyBatis-Plus 3.5.x + 任意常见数据库
  • 缓存: Redis 7.2.x / 7.4.x(或官方最新稳定版,确保打了 8.2.2 漏洞补丁)
  • 搜索: Elasticsearch 8.18.x + Spring Data ES 5.5.x(由 Boot 管理)
  • 消息队列: RocketMQ 5.3.x + rocketmq-v5-client-spring-boot-starter:2.3.4
  • 构建: Maven 3.9.x
  • 容器化: Docker Engine 27/28 稳定线 + Docker Desktop ≥4.44.3(推荐 4.50+)
  • 前置网关: OpenResty 1.27.1.x(例:1.27.1.2),反向代理到 Spring Boot