Spring Boot升级说明.md 3.5 KB

Spring Boot 升级说明

🔴 问题

错误信息:

java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(...) accessible: module java.base does not "opens java.lang" to unnamed module

原因:

  • 当前Java版本:Java 17
  • 当前Spring Boot版本:1.5.22.RELEASE(只支持Java 8)
  • Java 17引入了模块系统,与Spring Boot 1.5.x不兼容

✅ 解决方案

升级Spring Boot版本

将Spring Boot从1.5.22.RELEASE升级到2.7.18(支持Java 17)

🔧 已修改的文件

1. pom.xml

Spring Boot版本

  • 1.5.22.RELEASE 升级到 2.7.18

Maven Compiler插件

  • 3.8.1 升级到 3.11.0
  • Java版本从 7 升级到 17

MyBatis版本

  • 1.3.2 升级到 2.3.1

MySQL驱动

  • mysql-connector-java 5.1.49 升级到 mysql-connector-j 8.0.33
  • 驱动类从 com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver

Spring Boot Maven插件

  • 移除了 <skip>true</skip> 配置

2. AdminWebConfig.java

  • WebMvcConfigurerAdapter 改为 WebMvcConfigurer
  • Spring Boot 2.0+版本中 WebMvcConfigurerAdapter 已废弃

3. AdminInterceptor.java

  • 移除了 postHandleafterCompletion 方法
  • Spring Boot 2.0+版本中这些方法有默认实现,不需要实现

4. application.properties

  • MySQL驱动类从 com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver

📝 升级后的变化

1. 依赖版本

组件 旧版本 新版本
Spring Boot 1.5.22.RELEASE 2.7.18
MyBatis 1.3.2 2.3.1
MySQL驱动 5.1.49 8.0.33
Java版本 7/8 17

2. API变化

WebMvcConfigurer

  • Spring Boot 1.5.x:使用 WebMvcConfigurerAdapter
  • Spring Boot 2.0+:直接实现 WebMvcConfigurer

HandlerInterceptor

  • Spring Boot 1.5.x:需要实现所有方法
  • Spring Boot 2.0+:方法有默认实现,只需实现需要的方法

MySQL驱动

  • 旧版本:com.mysql.jdbc.Driver
  • 新版本:com.mysql.cj.jdbc.Driver

🚀 启动步骤

1. 清理并重新编译

cd book
mvn clean compile

2. 启动后端服务

mvn spring-boot:run

3. 验证服务

访问:http://localhost:8081/api/admin/login

⚠️ 注意事项

1. 数据库连接

  • MySQL 8.0+ 需要使用新的驱动类 com.mysql.cj.jdbc.Driver
  • 如果使用MySQL 5.7,可以继续使用旧驱动,但建议升级

2. 兼容性

  • Spring Boot 2.7.18 完全支持Java 17
  • 所有现有功能应该可以正常工作
  • 如果遇到问题,请查看启动日志

3. 其他依赖

  • 其他依赖版本会自动由Spring Boot管理
  • 如果遇到依赖冲突,可能需要手动指定版本

🔍 验证升级

1. 检查启动日志

启动后应该看到:

Started BookApplication
Tomcat started on port(s): 8081

2. 测试API接口

# 测试登录接口
curl -X POST http://localhost:8081/api/admin/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin123"}'

3. 测试前端

  • 访问:http://localhost:8000/pages/login.html
  • 使用管理员账号登录
  • 测试书籍管理功能

📚 参考文档