Springboot 2.x + Java 1.8升级到Springboot 3.x + OpenJDK 17笔记

引言

截止至2025年3月,OpenJDK已经开发到版本OpenJDK 25了。由于项目还再用Java 1.8(对应于OpenJDK 8),被SonerQube扫出一堆安全问题。因此,尝试使用通义灵码对整个项目升级,可惜结果差强人意,最后几个小改动后终于完成了升级。

Java版本的改动

这是一个maven项目,首先我们要把Project的JDK和pom.xml里面的Java版本号都改为17。

Spring Boot 3.x至少需要OpenJDK 17。

Project Settings - SDK

<!-- pom.xml -->
...
    <properties>
        <java.version>17</java.version>
    </properties>
...

Spring Boot的改动

Spring Boot当前最新包是3.4.4(截止于2025年3月)

修改pom.xml里面的引用

首先需要把这个parent更新到最新版本。

<!-- pom.xml -->
...
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version> <!-- 更新版本号 -->
        <relativePath/>
    </parent>
...

修改所有Java里面的引入包

从Spring Boot 3.0.0开始,Spring Boot弃用了Java EE(javax包已经不再维护)并开始使用Jakarta EE(jakarta包继承了javax包,并由Eclipse基金会继续发展),因此我们需要把所有的javax.servlet包替换成jakarta.servlet包。

// LogonController.java
...
import jakarta.servlet.http.HttpSession;
...

修改application-dev.yml

Spring Boot 3.x的静态资源配置多了一层web,因此要加上。

# application-dev.yml
...
spring:
  web:
    resources:
      static-locations: classpath:/webapp/
...

Swagger的改动

当Spring Boot升级到3.x后,这期间发生了一连串的事情:

  • Spring Boot 3.0.0后转用了Jakarta EE
  • Swagger 2.0 (Springfox) 使用的是javax.*,而且一直不兼容jakarta.*。
  • Swagger规范被捐献给Linux基金会。Linux基金会随后把Swagger正式改名为OpenAPI Specification (OAS) (aka. Swagger 3.0)

因此原来的Swagger会被改名为OpenAPI,连带产生一连串的改动。

修改web.xml里面的包引用

我们需要引入新规范的包(常用springdoc),并删掉原来的springfox包。

<!-- web.xml -->
...
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.8.6</version>
        </dependency>
...

修改Config文件

删掉原来的SwaggerConfig.java并加入新的OpenApiConfig.java

// OpenApiConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;

@Configuration
public class OpenApiConfig {

    @Bean
    public OpenAPI springOpenAPI() {
        return new OpenAPI().info(new Info()
                .title("SpringDoc API")
                .description("SpringDoc Simple Application")
                .version("0.0.1"));
    }
}

修改application-dev.yml

springdoc有自己的配置,因此要加上。

# application-dev.yml
...
springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    persistAuthorization: true
...

修改每个API里面的声明

这部分我基本交给了通义灵码来处理,毕竟都是一些体力活。简单总结一下就是:

  • io.swagger.*会被io.swagger.v3.oas.*所取代。
  • ApiOperation改为Operation。
  • ApiParam改为Parameter。
  • 声明里面的属性名都有变化。
  • ……

所以还是交给AI来做吧。

总结

在更新项目之后,SonarQube 的评分终于好看多了,忍不住来简单记录一下这段“提分”历程!

顺带一提——整个代码修改过程其实只花了1-2个小时,真正花时间的反而是这份总结文档,写了整整5-6个小时!这不禁让我感叹一句:
知识果然才是最昂贵的“商品”,动手容易,讲明白太难了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值