老项目升级SpringBoot2.x到3.2.8,JDK8升级17

一、升级jdk

jdk8到jdk17,其中的包名进行了修改,由javax改为了jakarta,但是我们不需要自己手动去改,IDEA工具提供了一个很好的功能,在 重构 选项中找到 迁移软件包和类 ,然后选择 Java EE to Jakarta EE 就可以了,是不是很简单,然后设置一下你项目所用的jdk版本为17就OK了

 最后记得改一下maven打包所依赖的jdk版本

二、SpringBoot升级

1、修改springboot和springcloud依赖版本

如果项目不是微服务项目,没有用到springcloud,就只用升级springboot即可

springboot 和 springcloud的对应版本

 将springboot的版本改为3.2.8,springcloud版本改为2023.0.0

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.2.8</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2023.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、查看官方升级指南

文档:Spring Boot 3.0 Migration Guide · spring-projects/spring-boot Wiki · GitHub

帮大家整理了下注意点:

        将 Spring Security 的过滤器配置为为每种调度类型调用。可以使用以下属性配置类型

spring.security.filter.dispatcher-types
  • Spring Boot 3.0 重新命名/删除了一些配置属性,需要相应地更新

        Spring Boot 提供了一个 spring-boot-properties-migrator 模块。一旦将其作为依赖项添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断报告,还会在运行时为您临时迁移属性

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-properties-migrator</artifactId>
	<scope>runtime</scope>
</dependency>
  • 类型级不再需要 @ConstructingBinding,简单来说就是自动做了字段的映射,可以省略了
  • 自动配置文件 

        2.x老版本使用的都是spring.factories文件,放在资源目录resources/META-INF/下

        现在引入了用于注册自动配置的新 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,同时保持了与 spring.factories 中注册的向后兼容性

  • JMX默认只暴露Health端点

        可使用属性 management.endpoint.env.show-values 或 management.endpoint.configprops.show-values 进行配置

  • 更改数据属性 

   spring.data 前缀是为 Spring Data 保留的,该前缀下的任何属性都意味着类路径中需要 Spring Data。Redis 的配置属性已从 spring.redis. 移动到  spring.data.redis.因为 redis 自动配置要求 Spring Data 存在于类路径中

  • MySQL JDBC 驱动程序的坐标已从 mysql:mysql-connector-java 变为 com.mysql:mysql-connector-j

3、踩雷经验

  • redis

在Springboot官网提供的升级指南也提到了使用spring data的包名都改成了 spring.data,

由于我使用的spring-boot-starter-data-redis依赖,需要也需要将配置文件改掉

  • swagger!!!

   由于代码侵入性太强了,升级SpringBoot3.0之后有冲突,废弃了Springfox,需要换成Springdoc

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
</dependency>

对应的注解也需要更换

@Api -------->  @Tag

@ApiIgnore -------> @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden

@ApiImplicitParam -------> @Parameter

@ApiImplicitParams -------> @Parameters

@ApiModel -------> @Schema

@ApiModelProperty(hidden = true) -------> @Schema(accessMode = READ_ONLY)

@ApiModelProperty -------> @Schema

@ApiOperation(value = "") -------> @Operation(summary = "")

@ApiParam -------> @Parameter

@ApiResponse(code = 0, message = "") -------> @ApiResponse(responseCode = "0", description = "")

  • sa-token

需要更换支持springboot3的依赖

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot3-starter</artifactId>
    <version>1.38.0</version>
</dependency>

  • validation

校验参数的依赖也需要更换,从javax到jakarta

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
</dependency>
  • rabbitmq

属性配置废弃:spring.rabbitmq.publisher-confirms=true  

需更换:spring.rabbitmq.publisher-confirm-type=correlated

  • mybatis plus
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.5</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.5</version>
</dependency>

总结:

可以先熟读spring官方提供的升级指南,这样能少走很多弯路,各种三方的依赖一样,比如mybaits-plus 官网也给出了使用springboot需要更换的依赖,如果有不知道该选什么版本的maven依赖,可以在maven仓库中搜索对应的依赖,然后查询pom文件中所用到一些spring相关的依赖版本是否和你所用的版本一致,如下图所示

升级 EMQX 从版本 3.2.8 到 4.4.1 时,需要遵循特定的步骤以确保升级过程平稳且数据完整。以下是详细的升级步骤: ### 升级步骤 1. **备份数据** 在开始任何升级操作之前,务必备份所有配置文件持久化数据。EMQX 的配置文件通常位于 `etc` 目录,而持久化数据可能存储在 `data` 或 `mnesia` 目录中。备份可以防止升级失败时丢失关键信息[^1]。 2. **停止当前的 EMQX 服务** 使用以下命令停止正在运行的 EMQX 实例: ```bash ./bin/emqx stop ``` 3. **下载并解压新版本** 从 [EMQX 官方网站](https://www.emqx.io/downloads) 下载适用于目标操作系统的 4.4.1 版本。下载完成后,将新版本解压到新的目录中,避免覆盖旧版本的配置文件[^1]。 4. **迁移配置文件** 将旧版本中的配置文件(如 `emqx.conf` `plugins` 相关配置)复制到新版本的 `etc` 目录中。需要注意的是,由于 4.x 版本的配置格式与 3.x 有所不同,部分配置项可能需要调整。例如,3.x 中的 `mqtt` 配置项在 4.x 中被重新组织为 `listener` `zone` 等[^1]。 5. **启用插件(如需要)** 如果使用了插件(如 `emqx_auth_mysql` 或 `emqx_bridge_mqtt`),请确保在新版本中重新启用这些插件。可以通过以下命令启用插件: ```bash ./bin/emqx_ctl plugins load <plugin_name> ``` 6. **启动新版本的 EMQX** 完成配置迁移后,启动新版本的 EMQX 服务: ```bash ./bin/emqx start ``` 7. **验证升级** 使用以下命令检查 EMQX 是否成功启动并运行在预期版本: ```bash ./bin/emqx_ctl status ``` 此外,可以检查日志文件以确认是否有错误或警告信息,日志文件通常位于 `log` 目录中[^1]。 ### 配置差异说明 EMQX 4.x 引入了新的配置格式模块化架构,与 3.x 相比,主要变化包括: - **配置文件结构**:4.x 的 `emqx.conf` 更加模块化,支持更细粒度的配置项。例如,监听器配置从 `mqtt.listener` 改为 `listener.tcp.default`。 - **插件系统**:4.x 的插件系统更加灵活,支持热加载动态配置更新,但部分 3.x 插件可能需要更新或替换为新版本。 - **认证与授权**:4.x 提供了更强大的认证与授权机制,支持多种后端(如 MySQL、PostgreSQL、MongoDB 等),并且可以通过规则引擎实现更复杂的逻辑[^1]。 ### 升级注意事项 - **兼容性**:确保新版本的插件与 3.x 兼容,或使用官方推荐的替代方案。 - **性能调优**:4.x 的默认配置可能不适合所有场景,建议根据实际负载进行性能调优。 - **监控与日志**:升级后,建议密切关注系统监控指标日志,确保一切正常运行[^1]。 ### 示例配置迁移 以下是一个从 3.x 迁移到 4.x 的简单配置示例: **3.x 配置:** ```ini mqtt.listener.tcp.0 = 0.0.0.0:1883 mqtt.listener.ssl.0 = 0.0.0.0:8883 mqtt.listener.ws.0 = 0.0.0.0:8083 mqtt.listener.wss.0 = 0.0.0.0:8084 ``` **4.x 配置:** ```ini listener.tcp.default = 0.0.0.0:1883 listener.ssl.default = 0.0.0.0:8883 listener.ws.default = 0.0.0.0:8083 listener.wss.default = 0.0.0.0:8084 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值