写点什么

升级到 JDK17 和 Spring Boot 2.7.8

作者:xiaoboey
  • 2023-02-14
    重庆
  • 本文字数:1384 字

    阅读完需:约 5 分钟

升级到JDK17和Spring Boot 2.7.8

这几天稍微得闲,尝试把fron-zero-to-n这个项目的 Spring Boot 版本升级到 2.7.8,JDK 升级到 17,为后续升级到 Spring Boot 3.0 做准备。

1、详细版本

Spring Boot 和 Spring Cloud 的版本对应关系,还是参考https://start.spring.io或者https://start.spring.io/actuator/info

2、切换 JDK 版本

这里简单说一下开发环境如何切换 JDK。笔者没有用那些号称可以自动切换的工具,纯手工操作。

2.1 安装多个版本的 JDK

为了方便切换 JDK,建议用 zip 包直接解压的方式安装 JDK,这样各种版本的 JDK 就可以和平相处了。

2.2 MAVEN 切换 JDK

在 Windows 上,直接修改 bin 下的 mvn.cmd,在文件最前面上设置变量 JAVA_HOME,直接指向要切换的 JDK。

set JAVA_HOME=D:\program files\Java\jdk-17.0.2
复制代码

2.3 IntelliJ IDEA 切换 JDK

2.3.1 Maven

设置 Maven 用 JDK17 运行。菜单路径: File -> Settings... -> Build,Execution,Deployment -> Build Tools -> Maven -> Runner



2.3.2 Project JDK

菜单路径: File -> Project Structure... ->



3、升级 zero 和 one

from-zero-to-n\zero 和 from-zero-to-n\one 这两个文件夹下的项目,都是直接修改 pom.xml 里的配置,重新编译就 OK 了,没什么好说的。

4、升级 from-zero-to-n\two

这个项目的升级,涉及到了代码修改。

4.1 数据库 H2 的升级

直接修改 pom.xml 里的设置之后,编译没问题,但是运行会报错。如果旧版本的 H2 数据库文件已经存在,则需要删除掉,应用启动时会自动创建和初始化。

4.2 Fix “… expected identifier”

解决 org.h2.jdbc.JdbcSQLSyntaxErrorException: … expected identifierauth-server 里用到的实体 User,JPA 默认创建的表名是 user,跟 H2 数据库里的保留字冲突了,需要给实体指定另外一个名称。

修改 com.example.two.authserver.entity.User.java

@Entity@Table(name = "d_user")public class User implements UserDetails, Serializable ...
复制代码

修改 com.example.two.authserver.entity.Role.java

@Entity@Table(name = "d_role")public class Role implements GrantedAuthority ...
复制代码


4.3 很多过时的类和注解(Deprecated)

升级走到这一步,项目可以跑起来了,但是有很多过时的类和注解,oauth2 相关的全军覆没:


ClientDetailsServiceConfigurer

AuthorizationServerConfigurerAdapte

EnableAuthorizationServer

EnableResourceServer

AuthorizationServerEndpointsConfigurer

ClientDetailsService

CompositeTokenGranter

OAuth2RequestFactory

provider.TokenGranter

ClientCredentialsTokenGranter

AuthorizationCodeServices

AuthorizationCodeTokenGranter

ImplicitTokenGranter

ResourceOwnerPasswordTokenGranter

RefreshTokenGranter

AuthorizationServerTokenServices

TokenStore

JwtAccessTokenConverter

JwtTokenStore

KeyStoreKeyFactory

@EnableAuthorizationServer

@EnableResourceServer



源代码上的 Deprecated 注释,都指向了OAuth 2.0 Migration Guide,该迁移指南表明这次升级不是精确的一对一替换,而是用新项目 Spring Authorization Server 来替换旧框架 Spring Security OAuth2,改动很大。

4.4 放弃迁移到 Spring Authorization Server

从 Spring Authorization Server 的 release 来看,对应我们这个项目的 Spring Boot 2.7.8,它的版本是 0.4.0,生产环境的话风险有点大。

所以就不折腾了,1.0 版本是对应的 Spring Boot 3.0,到时再研究一下。


上一篇:https://xie.infoq.cn/edit/e940fe066a65b604019110c26

发布于: 刚刚阅读数: 3
用户头像

xiaoboey

关注

IT老兵 2020-07-20 加入

资深Coder,爱好钓鱼逮鸟。

评论

发布
暂无评论
升级到JDK17和Spring Boot 2.7.8_Spring Cloud_xiaoboey_InfoQ写作社区