Spring Boot 3.0 升级记录
知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《Spring Boot 3.0 升级记录》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
Spring Boot常用于Java后端开发,于2022年11月24日正式发布了3.0.0版本,带来了全新的特性、升级了依赖版本乃至Java版本,与此同时也弃用或更改了一些旧版本中的写法,导致了需要修改代码或配置文件。
笔者尝鲜去升级了一下Spring Boot 3.0,本篇文章将会简要归纳总结一下笔者在升级的时候需要进行的操作、遇到的问题和解决方案,希望能对各位读者有所帮助。
版本信息
作为参考,笔者升级后各版本信息如下:
- Spring Boot 3.0.0
- Spring 6.0.2
- Spring Security 6.0.0
- Spring Data JPA 3.0.0
- Java 17
- Gradle 7.6
确认依赖
Spring框架的版本可以通过Gradle插件
io.spring.dependency-management来进行自动管理,升级Spring Boot版本时会带着Spring框架以及Spring生态全家桶一起升级。
推荐安装依赖Spring Boot Properties Migrator来检查是否有被弃用的Spring Boot配置文件属性,可以在
build.gradle文件里的
dependencies闭包中添加:
implementation 'org.springframework.boot:spring-boot-properties-migrator'
在升级完成后,可以移除这个依赖。
升级MySQL JDBC驱动(可选)
这一步不是必须的,MySQL的JDBC驱动在2022年10月份的时候更改过名称,虽然不改也能继续用,不过还是建议顺路一起改一下吧,在
build.gradle文件中的
dependencies,将
mysql:mysql-connector-java更改为
com.mysql:mysql-connector-j,例如:
runtimeOnly 'com.mysql:mysql-connector-j'
升级到2.7
为了确保升级顺利,不要急着一步到位直接升级3.0,建议先将Spring Boot升级到2.7版本确认2.x时代的兼容性,截止发稿时最新的版本为2.7.6,可以将
build.gradle中的
plugins闭包内的
org.springframework.boot版本改为
2.7.6,例如:
plugins {
id 'org.springframework.boot' version '2.7.6'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}构建并启动服务端确认没有问题后,可以关闭服务端,进行下一步升级。
升级Java版本
从Spring Boot 3.0开始,最低支持的Java版本变为Java 17、最高支持Java 19,如果还在使用Java 8或者Java 11的话,首先需要升级Java。
推荐使用LTS版本的Java 17,Oracle官方的JDK可以在这里下载,也可以使用诸如Eclipse Temurin之类的第三方构建OpenJDK,还可以使用Docker镜像
openjdk:17.0.2。如果使用的是IntelliJ IDEA,可以在
文件-
项目结构-
平台设置-
SDK中点击
+自动下载JDK,下载完毕后在
项目设置-
项目中更换
SDK与
语言级别。
如果对自己的代码能否在高版本Java正常运行没有信心,可以使用[Eclipse Migration Toolkit for Java(EMT4J)
](https://github.com/adoptium/e...)之类的工具检查一下是否存在不兼容高版本的写法。
升级Gradle版本
高版本的Java也需要高版本的Gradle进行构建,为了成功构建,还需要升级Gradle版本,对应的最低支持版本如下:
| Java | Gradle |
|---|---|
| 17 | 7.3 |
| 18 | 7.5 |
| 19 | 7.6 |
例如,上一步安装了Java 17,这一步可以选择Gradle 7.3.3、7.4.2、7.5.1、7.6等版本,如果没有特殊需求的话,建议一步到位选择最新版本(可以在发布页面找到),截至发稿时的最新版本为7.6。
如果使用的是Gradle Wrapper,可以直接修改
gradle/wrapper/gradle-wrapper.properties中的
distributionUrl,例如:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
升级完毕后,使用Java 17或Java 19构建并启动Spring Boot 2.7的服务端,如果没有问题可以关闭后进行下一步。
升级到3.0
与升级到2.7类似,修改
build.gradle中的插件版本即可,截止发稿时最新的版本为3.0.0(最新版本可以在发布页面找到),例如:
plugins {
id 'org.springframework.boot' version '3.0.0'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}迁移到Jakarta EE
从Spring Boot 3.0开始,原有的Java EE被彻底弃用,换用Jakarta EE,也就是说,所有包名为
javax.*的引用都需要更换为
jakarta.*。如果使用的是IntelliJ IDEA,可以点击
重构-
迁移软件包和类-
Java EE to Jakarta EE来自动完成扫描和迁移。
此时可以尝试构建并启动服务端,如果能成功启动,恭喜Spring Boot 3.0升级成功。如果无法正常构建或启动,还需要继续阅读问题排查。
构建问题排查
以下是笔者遇到的一些会导致通不过构建的问题。
gRPC
找不到javax.annotation.Generated
如果使用了gRPC,会根据proto文件生成一些Java文件,生成的Java文件中会有
@javax.annotation.Generated注解,而上文提到了Spring Boot 3.0已经全面换成Jakarta EE,如果还需要使用Java EE的类,必须得自己手动引入依赖。
依赖引入到
build.gradle文件中的
dependencies,需要添加:
implementation 'javax.annotation:javax.annotation-api:1.3.2'
Spring Security
Spring Security 6.0也是一个大升级,光这部分又能单独写一篇文章,本文简单讲一下最关键的变更。
找不到类org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
几乎是大家都会用去的
WebSecurityConfigurerAdapter被删除了,原先继承这个的类现在无需继承任何类,只需要带上
@Configuration注解。
原本配置
WebSecurity和
HttpSecurity的
configure方法变为普通的
@Bean方法,分别返回
WebSecurityCustomizer和
SecurityFilterChain。
原先的方法
authorizeRequests变为
authorizeHttpRequests、方法
antMatchers变为
requestMatchers。
修改自Spring Security官方博客的例子:
// 以前的写法
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/ignore1", "/ignore2");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic(withDefaults());
}
}// 现在的写法
@Configuration
// 不再继承于WebSecurityConfigurerAdapter
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
// WebSecurityCustomizer是一个类似于Consumer<websecurity>的接口,函数接受一个WebSecurity类型的变量,无返回值
// 此处使用lambda实现WebSecurityCustomizer接口,web变量的类型WebSecurity,箭头后面可以对其进行操作
// 使用requestMatchers()代替antMatchers()
return (web) -> web.ignoring().requestMatchers("/ignore1", "/ignore2");
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
//使用authorizeHttpRequests()代替authorizeRequests()
.authorizeHttpRequests((authz) -> authz
//这种写法被称为Lambda DSL,代替原来的and()链式操作
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
// 需要进行build(),返回SecurityFilterChain
return http.build();
}
}</websecurity>运行问题排查
以下是笔者遇到的一些会导致无法启动服务端的问题。
Spring Data JPA
找不到类org.hibernate.dialect.MySQL5InnoDBDialect
一般用于
spring.jpa.properties.hibernate.dialect,如果使用的是MySQL,请将其更改为
org.hibernate.dialect.MySQLDialect,例如:
org.hibernate.dialect.MySQL5InnoDBDialect=org.hibernate.dialect.MySQLDialect
找不到类org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
一般用于
spring.jpa.hibernate.naming.physical-strategy,如果需要将驼峰转换为下划线,请其将更改为
org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy,例如:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
参考链接
- Spring Boot 3.0.0 - GitHub Release
- Spring Boot 3.0 Release Notes
- Spring Boot 3.0 Migration Guide
- Spring Security without the WebSecurityConfigurerAdapter
- Gradle Compatibility Matrix
理论要掌握,实操不能落!以上关于《Spring Boot 3.0 升级记录》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
Win10 安装MySQL
- 上一篇
- Win10 安装MySQL
- 下一篇
- 《墨天轮2022年数据库大调查》正式启动,填写问卷领取丰厚奖品
-
- 数据库 · MySQL | 21小时前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3161次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3374次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3402次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4505次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3783次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览

