Spring Boot 2.x 升级到 3.x
  楠木大叔   5/24/25 9:14:45 AM
我们现有项目大多是基于Java 8 + Springboot 2.x构建的。 如果要想更好地适配MCP Sever,我最好是先做升级。 以下是 Spring Boot 2.x 升级到 3.x 针对指定组件的详细依赖变更清单,包含具体版本和配置调整:
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.4.4)

最近mcpserver实在是太火了。

MCP的出现,可能会带来用户交互的革命性变化。

传统的"菜单式"、“按钮式”的UI交互可能会简化成一个聊天窗口。用户只需要给系统下达"指令",系统自动生成答案,并输出到聊天窗口。

那么,企业内部数据如何接入呢? 答案,就是MCP。

值得庆幸的是,官方提供了MCP Server的Java SDK,但是也有限制:

Let’s get started with building our weather server! You can find the complete code for what we’ll be building here.
For more information, see the MCP Server Boot Starter reference documentation. For manual MCP Server implementation, refer to the MCP Server Java SDK documentation.
​System requirements

  • Java 17 or higher installed.
  • Spring Boot 3.3.x or higher

我们现有项目大多是基于Java 8 + Springboot 2.x构建的。

如果要想更好地适配MCP Sever,我最好是先做升级。

以下是 Spring Boot 2.x 升级到 3.x 针对指定组件的详细依赖变更清单,包含具体版本和配置调整:


一、基础环境强制要求

  1. JDK 版本

    • 最低要求:JDK 17(彻底放弃 JDK 8/11)
    • 检查所有代码是否使用 JDK 17 特性(如 varrecord 等)
  2. Maven 版本

    • 必须使用 Maven 3.6.3+(建议 3.8.6+)
    • 父 POM 更新
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version> <!-- 最新稳定版 -->
      </parent>

二、数据库相关组件

1. MySQL 连接驱动(关键变更)

  • 依赖坐标变更(官方包名重构):

    <!-- 旧版 (2.x) -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

    <!-- 新版 (3.x) -->
    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.0.33</version> <!-- 必须 8.0.33 -->
    </dependency>
  • 配置调整

    # 旧版 URL
    spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false

    # 新版必须显式指定时区

    spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=Asia/Shanghai

2. MyBatis-Plus(重点检查项)

  • 最低版本要求:3.5.3.2+(旧版会报 javax 相关 ClassNotFound)

  • 依赖版本升级

    <!-- 旧版 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.5.2</version>
    </dependency>

    <!-- 新版 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.5.3.2</version>
    </dependency>
  • 分页插件兼容性

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
      MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
      // 确保使用新版本 DbType.MYSQL
      interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
      return interceptor;
    }

三、Redis 客户端

  1. 依赖坐标(无需变更,但需注意兼容性):

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. 配置属性迁移

    # 旧版 (2.x)
    spring.redis.timeout=3000
    spring.redis.lettuce.pool.max-active=8

    # 新版 (3.x) 前缀改为 spring.data.redis

    spring.data.redis.timeout=3000
    spring.data.redis.lettuce.pool.max-active=8
  3. 代码级变更

    • 所有涉及 javax.annotation 的注解需替换为 jakarta.annotation

四、Knife4j(Swagger 增强)

  1. 依赖变更(必须使用 Spring Boot 3 专用版本):

    <!-- 旧版 (2.x) -->
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-spring-boot-starter</artifactId>
      <version>3.0.3</version>
    </dependency>

    <!-- 新版 (3.x) -->
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-openapi3-jakarta-starter</artifactId>
      <version>4.3.0</version>
    </dependency>
  2. 配置调整

    # 旧版路径
    knife4j.enable=true
    knife4j.production=false

    # 新版需改用 OpenAPI 3.0 规范

    springdoc.swagger-ui.enabled=true
    springdoc.api-docs.enabled=true
  3. 代码示例

    @Bean
    public OpenAPI springShopOpenAPI() {
      return new OpenAPI()
        .info(new Info().title("API 文档")
        .description("Spring Boot 3.x 项目")
        .version("v1.0"));
    }

五、Jakarta EE 迁移(影响所有组件)

  1. 全局替换(IDE 批量操作):

    • javax.persistence.*jakarta.persistence.*
    • javax.servlet.*jakarta.servlet.*
    • javax.validation.*jakarta.validation.*
  2. 工具辅助

    # 使用 Eclipse Transformer 自动迁移
    java -jar org.eclipse.transformer.cli-*.jar --input=src/main/java/

六、验证与排错

  1. 依赖树检查

    # 检查冲突依赖
    mvn dependency:tree -Dincludes=mysql,mybatis,knife4j,jakarta
  2. 常见错误解决

    • 问题java.lang.NoClassDefFoundError: javax/servlet/Filter
      解决:确保所有依赖(如 MyBatis-Plus、Knife4j)已升级到兼容 Spring Boot 3.x 的版本
    • 问题:MySQL 连接超时
      解决:检查 URL 是否添加 &serverTimezone=Asia/Shanghai
  3. 日志分析

    # 启动时添加 --debug 参数查看自动配置报告
    java -jar your-app.jar --debug

通过以上步骤可系统化完成升级,更多细节参考:Spring Boot 3.0 迁移指南Knife4j 官方文档

启动项目,看效果

在浏览器输入http://localhost:8081/sse

id:7c5767a2-c9b4-4852-91e5-43963c982b27
event:endpoint
data:/mcp/message




版权声明: 本文为智客工坊「楠木大叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。