java

Springboot 2.6 升级到Spring Boot 3.

2023-01-12  本文已影响0人  木巽

Spring boot 在2022年11月24日发布了3.0版本,该版本最大的亮点是可以编译成本地可执行文件,极大地提高java程序运行速度,减少程序运行时资源占用。我已经体验了一把,现分享一下,可以让大家少走点弯路。

一、开发环境IDE升级(JDK17+IDEA 2021.2.4)

因为spring boot 3 需要jdk的版本至少为17,java17是Oracle公司接管后的第一个可长期免费商业使用的版本。用java8这么多年了,终于可以用新的语法糖了,比如:用var关键字来定义变量这个特性C#在十几年前就可以用了,现在升级到java17也可以用了。

要支持java17的开发环境,如果你是用IntelliJ IDEA的话,至少要升级到2021.2.4 +版本了。

二、Spring Cloud 等其他Spring生态类库升级

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2022.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2022.0.0.0-RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

以上是我的pom.xml文件中的部分内容,可见Spring Cloud的主版本为2022.0.0;spring-cloud-alibaba 的主版本为2022.0.0.0-RC1,是2022年12月22日发布的候选版,正式版应该也快发布了,到时再修改一下。

Spring boot starter web 3 依赖关系

看上图spring-boot-starter-web 3.0版本的依赖中,spring-web,spring-context版本已经升级到6.0了,如果单独引用的话也要注意版本升级。

三、servlet-api 升级

以前的4.0版本配置:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

最新的6.0版本的配置:

        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>

注意升级后包名发生了变化,要将javax.servlet.** 批量改为jakarta.servlet.** 。比如:
javax.servlet.http.HttpServletRequestjavax.servlet.http.HttpServletResponse 分别改为
jakarta.servlet.http.HttpServletRequestjakarta.servlet.http.HttpServletResponse

四、spring-data-redis 升级

spring-data-redis 升级到3.0之后,配置文件发生了变化;
最新的配置如下:

##### redis配置
spring.data.redis.host=192.168.50.101
spring.data.redis.port=6379
spring.data.redis.database=11
spring.data.redis.password=haoxun
spring.data.redis.timeout=5000
spring.data.redis.lettuce.pool.enabled= true
# 连接池最大连接数(使用负值表示没有限制)
spring.data.redis.lettuce.pool.max-active=5
# 连接池中的最大空闲连接
spring.data.redis.lettuce.pool.max-idle=5
# 连接池中的最小空闲连接
spring.data.redis.lettuce.pool.min-idle=1
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.data.redis.lettuce.pool.max-wait=5000
spring.data.redis.lettuce.pool.time-between-eviction-runs=1000

即原来的配置以spring.redis为前缀,现在要批量改为spring.data.redis为前缀;

五、Swagger 升级

改动比较大,因为 com.spring4all» swagger-spring-boot-starter已经停止维护了,所以在Spring boot 3.0下用不了。com.github.xiaoymin» knife4j-spring-boot-starter» 3.03要升级为

<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.0.0</version>

类库名发生了变化,底层不再使用io.springfox.*的类库,注解类库发生变化(由io.swagger» swagger-annotations»1.5.24 变为 io.swagger.core.v3» swagger-annotations-jakarta»2.2.7),因此所有的swagger注解都要重写。具体变化如下:

swagger2注解 swagger3注解 注解位置
@Api @Tag(name = “接口类描述”) Controller 类上
@ApiOperation @Operation(summary =“接口方法描述”) Controller 方法上
@ApiImplicitParams @Parameters Controller 方法上
@ApiImplicitParam @Parameter(description=“参数描述”) Controller 方法上 @Parameters 里
@ApiParam @Parameter(description=“参数描述”) Controller 方法的参数上
@ApiIgnore @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden 方法或参数
@ApiModel @Schema DTO类上
@ApiModelProperty @Schema DTO属性上

另外还需要定义一个config类来初始化Bean才能运行起来,详见官方的示例代码: https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/tree/master/knife4j-spring-boot3-demo

六、完整的示例代码

Git仓库地址:https://gitee.com/IElwin/ezlcp-java ,各微服务可以正常运行,需要先执行init目录下的数据库脚本,以及导入init目录下的nacos配置。目前功能还在逐步开发中,可以先参考一下架构。

上一篇下一篇

猜你喜欢

热点阅读