# 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插件 - 移除了 `true` 配置 ### 2. AdminWebConfig.java - 从 `WebMvcConfigurerAdapter` 改为 `WebMvcConfigurer` - Spring Boot 2.0+版本中 `WebMvcConfigurerAdapter` 已废弃 ### 3. AdminInterceptor.java - 移除了 `postHandle` 和 `afterCompletion` 方法 - 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. 清理并重新编译 ```bash cd book mvn clean compile ``` ### 2. 启动后端服务 ```bash 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接口 ```bash # 测试登录接口 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` - 使用管理员账号登录 - 测试书籍管理功能 ## 📚 参考文档 - [Spring Boot 2.7 Release Notes](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes) - [Migrating from Spring Boot 1.x to 2.x](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide)