升级到 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。
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
修改 com.example.two.authserver.entity.Role.java
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,到时再研究一下。
版权声明: 本文为 InfoQ 作者【xiaoboey】的原创文章。
原文链接:【http://xie.infoq.cn/article/4e9fbe821c8526e861892db9e】。未经作者许可,禁止转载。
评论