
关于项目从java8升级到java17需要做的变更
现在java最新版本都升级到22了,本着你升任你升,我用java8的原则,之前我的项目也一直是java8。但是最近看到java8项目的占用率逐渐减少,java17和java21的版本占有率逐渐提升,都超过市场一半以上份额了。本着追求新技术的考虑,新版本更优秀的性能以及兼容性的考虑,我将java8升级到了java17了。
现在java最新版本都升级到22了,本着你升任你升,我用java8的原则,之前我的项目也一直是java8。
但是最近看到java8项目的占用率逐渐减少,java17和java21的版本占有率逐渐提升,都超过市场一半以上份额了。
本着追求新技术的考虑,新版本更优秀的性能以及兼容性的考虑,我将java8升级到了java17了。
在升级过程中,需要考虑以下细节:
1.IDE配置
确保你的 IDE 配置为使用 Java 17。
在 IntelliJ IDEA 中:
打开 “File” -> “Project Structure”。
在 “Project” 标签页中,设置 Project SDK 为 Java 17。
在 “Modules” 标签页中,确保每个模块的 SDK 和语言级别都设置为 Java 17。
2.springboot依赖的变化
springboot的版本从2.x的版本变成3.x的版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
<relativePath/>
</parent>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.6</version>
<relativePath/>
</parent>
3.servlet的包从javax变成jakarta
从java9起,javax的包迁移到jakarta的包了
import javax.servlet.servletRequest;
import javax.servlet.servletResponse;
import jakarta.servlet.servletRequest;
import jakarta.servlet.servletResponse;
在IDEA中提供功能进行重构和迁移。
4.mybatis包的变更
升级后mybatis-plus-boot-starter变为mybatis-plus-spring-boot3-starter
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.5</version>
</dependency>
5.pom文件变更
将pom构建文件的java版本设置为17
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
6.数据库驱动
mysql数据库的驱动依赖从mysql-connector-java变成mysql-connector-j了。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.23</version>
</dependency>
7.swagger集成
我们经常使用的api文档的swagger-ui的springfox,现在不支持springboot3,所以改为使用springdoc-openapi了。
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
迁移说明文档:https://springdoc.org/#migrating-from-springfox
依赖变了之后,很多注解都要变,是个麻烦的事!
在IDEA其实可以通过Ctrl + Shift + R组合键批量替换注解!
8.JWT的变更
JWT从一个jjwt的包变更到需要引入三个包了。
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<scope>runtime</scope>
</dependency>
并且安全密钥的强度提升了,必须要大于512bit位才能运行。
private String secret = "this-is-your-generic-admin-secret-string-and-must-be-longer-than-512bit-size";
// 使用固定的密钥
private SecretKey secretKey = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8));
/**
* 根据负载生成JWT的token
*/
private String generateToken(Map<String, Object> claims) {
return Jwts.builder()
.claims(claims)
.expiration(generateExpirationDate())
.signWith(secretKey, SignatureAlgorithm.HS512)
.compact();
}
更多推荐
所有评论(0)