升级到JDK17和Spring Boot 2.7.8
这几天稍微得闲,尝试把fron-zero-to-n这个项目的Spring Boot版本升级到2.7.8,JDK升级到17,为后续升级到Spring Booot 3.0做准备。
详细版本
依赖项 | 升级前的版本 | 升级后的版本 |
---|---|---|
Spring Boot | 2.6.2 | 2.7.8 |
Spring Cloud | 2021.0.0 | 2021.0.5 |
Java | 1.8 | 17 |
Spring Boot和Spring Cloud的版本对应关系,还是参考https://start.spring.io
或者https://start.spring.io/actuator/info
切换JDK版本
这里简单说一下开发环境如何切换JDK。笔者没有用那些号称可以自动切换的工具,纯手工操作。
安装多个版本的JDK
为了方便切换JDK,建议用zip包直接解压的方式安装JDK,这样各种版本的JDK就可以和平相处了。
MAVEN切换JDK
在Windows上,直接修改bin下的mvn.cmd,在文件最前面上设置变量JAVA_HOME,直接指向要切换的JDK。
1 | set JAVA_HOME=D:\program files\Java\jdk-17.0.2 |
IntelliJ IDEA切换JDK
Maven
设置Maven用JDK17运行。
菜单路径: File -> Settings... -> Build,Execution,Deployment -> Build Tools -> Maven -> Runner
Project JDK
菜单路径: File -> Project Structure... ->
升级zero和one
from-zero-to-n\zero和from-zero-to-n\one这两个文件夹下的项目,都是直接修改pom.xml里的配置,重新编译就OK了,没什么好说的。
升级from-zero-to-n\two
这个项目的升级,涉及到了代码修改。
数据库H2的升级
直接修改pom.xml里的设置之后,编译没问题,但是运行会报错。如果旧版本的H2数据库文件已经存在,则需要删除掉,应用启动时会自动创建和初始化。
Fix “… expected identifier”
解决org.h2.jdbc.JdbcSQLSyntaxErrorException: … expected identifier
auth-server里用到的实体User,JPA默认创建的表名是user,跟H2数据库里的保留字冲突了,需要给实体指定另外一个名称。
修改com.example.two.authserver.entity.User.java
1 | @Entity |
修改com.example.two.authserver.entity.Role.java
1 | @Entity |
很多过时的类和注解(Deprecated)
升级走到这一步,项目可以跑起来了,但是有很多过时的类和注解,oauth2相关的全军覆没:ClientDetailsServiceConfigurerAuthorizationServerConfigurerAdapteEnableAuthorizationServerEnableResourceServerAuthorizationServerEndpointsConfigurerClientDetailsServiceCompositeTokenGranterOAuth2RequestFactoryprovider.TokenGranterClientCredentialsTokenGranterAuthorizationCodeServicesAuthorizationCodeTokenGranterImplicitTokenGranterResourceOwnerPasswordTokenGranterRefreshTokenGranterAuthorizationServerTokenServicesTokenStoreJwtAccessTokenConverterJwtTokenStoreKeyStoreKeyFactory
@EnableAuthorizationServer
@EnableResourceServer
源代码上的Deprecated注释,都指向了OAuth 2.0 Migration Guide,该迁移指南表明这次升级不是精确的一对一替换,而是用新项目Spring Authorization Server来替换旧框架Spring Security OAuth2,改动很大。
放弃迁移到Spring Authorization Server
从Spring Authorization Server的release来看,对应我们这个项目的Spring Boot 2.7.8,它的版本是0.4.0,生产环境的话风险有点大。
所以就不折腾了,1.0版本是对应的Spring Boot 3.0,到时再研究一下。