现在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();
    }
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐