Spring Boot 2.x 到 3.2 的全面升级指南

这篇具有很好参考价值的文章主要介绍了Spring Boot 2.x 到 3.2 的全面升级指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Framework 是一种流行的开源企业级框架,用于创建在 Java Virtual Machine (JVM) 上运行的独立、生产级应用程序。而Spring Boot 是一个工具,可以让使用 Spring 框架更快、更轻松地开发 Web 应用程序和微服务。随着 Spring Boot 的不断发展,开发人员必须跟上最新的升级和变化。

最近,Spring Boot 宣布发布 3.2.x 版本,该版本带来了多项新功能、错误修复和增强功能,鉴于对 Spring Boot 2.7.x 版本的支持已于 2023 年 11 月 18 日结束,这是一个非常重要且强制性的关注用于将 Spring Boot 应用程序升级到最新的 3.x 版本。

因此,在本文中,我们将讨论如何从 Spring Boot 2.x 迁移到 3.x,以及升级的优势以及开发人员在此过程中可能遇到的潜在困难。

升级指南

1. 升级 JDK 17

Spring Boot 3.0 需要 Java 17 作为最低版本。

如果您当前使用的是 Java 8 或 Java 11,则需要在 Spring Boot 迁移之前升级 JDK。

2. 升级到 Spring Boot 3

查看项目及其依赖项的状态后,请升级到 Spring Boot 3.0 的最新维护版本。

我们将使用 Spring Boot 3.2.0 进行升级。

打开项目的 pom.xml 并更新 Spring Boot 的版本,如下所示。

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>3.2.0</version>
</parent>

3. 配置属性迁移

在 Spring Boot 3.0 中,一些配置属性被重命名/删除,开发人员需要相应地更新其 application.properties/application.yml

为了帮助您实现这一点,Spring Boot 提供了一个 spring-boot-properties-migrator 模块。

我们可以通过将以下内容添加到 Maven pom.xml 来添加迁移器:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-properties-migrator</artifactId>
  <scope>runtime</scope>
</dependency>

4. 升级到 Jakarta EE

由于 Java EE 已更改为 Jakarta EE,Spring Boot 3.x 的所有依赖项 API 也从 Java EE 升级为 Jakarta EE。

简单来说,您需要将所有 javax 的 imports 都替换为 jakarta。具体如下:

javax.persistence.*   -> jakarta.persistence.*
javax.validation.*    -> jakarta.validation.*
javax.servlet.*       -> jakarta.servlet.*
javax.annotation.*    -> jakarta.annotation.*
javax.transaction.*   -> jakarta.transaction.*

5. 调整@ConstructorBinding注解

@ConstructorBinding@ConfigurationProperties 类的类型级别不再需要,应将其删除。

当一个类或记录有多个构造函数时,它仍然可以在构造函数上使用,以指示应使用哪一个构造函数进行属性绑定。

6. Spring MVC 和 WebFlux的URL匹配更改

从 Spring Framework 6.0 开始,尾部斜杠匹配配置选项已为 deprecated,其默认值设置为 false。

这意味着以前,以下控制器将匹配GET /healthGET /health/

@RestController
public class HealthController {

  @GetMapping("/health")
  public String health() {
    return "Application is Working";
  }

}

@RestController
public class HealthController {

  @GetMapping("/health")
  public Mono<String> health() {
    return Mono.just("Application is Working");
  }

}

7. RestTemplate 中的 Apache HttpClient

Spring Framework 6.0 中已删除对 Apache HttpClient 的支持,现在由 org.apache.httpcomponents.client5:httpclient5 取代(注意:此依赖项具有不同的 groupId)。

如果您注意到 HTTP 客户端行为存在问题,则 RestTemplate 可能会回退到 JDK 客户端。

org.apache.httpcomponents:httpclient 可以由其他依赖项传递传递,因此您的应用程序可能依赖此依赖项而不声明它。

下面是迁移后的RestTemplate示例:

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(){

        final SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactoryBuilder.create()
                .build();
        final PoolingHttpClientConnectionManager manager = PoolingHttpClientConnectionManagerBuilder.create()
                .setSSLSocketFactory(sslConnectionSocketFactory)
                .build();
        
        final CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(manager)
                .build();
        
        final HttpComponentsClientHttpRequestFactory componentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        componentsClientHttpRequestFactory.setHttpClient(closeableHttpClient);
        
        final RestTemplate restTemplate = new RestTemplate(componentsClientHttpRequestFactory);
        return  restTemplate;
        
    }
}

8. 升级 Spring Security

Spring Boot 3.0 已升级到 Spring Security 6.0。

因此,WebSecurityConfigurerAdapter 已被弃用。 Spring鼓励用户转向基于组件的安全配置。

为了演示新的配置风格,我们使用 Spring Security lambda DSL 和方法 HttpSecurity#authorizeHttpRequests 来定义我们的授权规则。

下面是使用 WebSecurityConfigurerAdapter 的示例配置,它通过 HTTP Basic 保护所有端点:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
    }

}

展望未来,推荐的方法是注册一个 SecurityFilterChain bean:

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

}

9. Spring Kafka 模板升级

KafkaTemplate 方法现在返回 CompleteableFuture 而不是 ListenableFuture,后者已被弃用。

Spring Boot 2.x 中带有 ListenableFuture 的 Kafka 模板:

private RoutingKafkaTemplate routingKafkaTemplate;

public void send(){
    ListenableFuture<SendResult<Object,Object>> future = routingKafkaTemplate.send("Message","topic");

    future.addCallback(new ListenableFutureCallback<>() {
        @Override
        public void onFailure(Throwable ex) {
            log.error(ex);
        }

        @Override
        public void onSuccess(SendResult<Object, Object> result) {
            log.info("success");
        }
    });
}

Spring Boot 3.x 中带有 CompletableFuture 的 Kafka 模板:

private RoutingKafkaTemplate routingKafkaTemplate;

public void send() {
    CompletableFuture<SendResult<Object, Object>> future = routingKafkaTemplate.send("Message", "topic");
    future.thenAccept(log::info)
            .exceptionally(exception -> {
                log.error(exception);
                return null;
            });
}

10. Spring Doc OpenAPI 升级

springdoc-openapi用于为Spring Boot 项目自动生成 API 文档。

springdoc-openapi的工作原理是在运行时检查应用程序,以根据 spring 配置、类结构和各种注释推断 API 语义。

对于 spring-boot 3 支持,请确保使用 springdoc-openapi v2。

WebMVC 项目的 Spring Doc OpenAPI 升级

对于 WebMVC 项目,您需要在 pom.xml. 文件中包含以下依赖项。

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

WebFlux 项目的 Spring Doc OpenAPI 升级

对于 WebFlux 项目,您需要在 pom.xml. 文件中包含以下依赖项。

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
    <version>2.3.0</version>
</dependency>

今日分享就到这里,感谢阅读!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源文章来源地址https://www.toymoban.com/news/detail-761427.html

到了这里,关于Spring Boot 2.x 到 3.2 的全面升级指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins升级指南 LTS2.361.1

    近期要在Jenkins中新增jacoco,对老旧Jenkins进行升级,碰到的一些问题汇总。 主目录,可在Configure System中查看,一般在: /var/lib/jenkins war包目录,可在linux启动程序充查看,一般在: /usr/lib/jenkins 系统服务脚本,我司在centos中安装运行,在 /etc/rc.d/init.d/jenkins jenkins日志,一般配

    2024年02月16日
    浏览(33)
  • Docker部署的gitlab升级指南(15.11.X容器里升级PostgreSQL到13.8)

    一、确定当前版本 二、备份数据,防止升级发生意外 三、确定升级路线 docker环境部署gitlab的升级很简单,直接基于高版本的镜像运行容器即可; 需要注意的是gitlab的升级不能跨大版本升级,详见升级路径: https://docs.gitlab.com/ee/update/index.html#upgrade-paths 可在此链接查看gitla

    2024年01月16日
    浏览(39)
  • Spring Boot 升级 3.2 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! youlai-boot 升级 Spring Boot 3.2 版本项目启动报错: 报错截图如下: mybatis-spring 官方 ISSUE: https://githu

    2024年02月03日
    浏览(37)
  • JDK 8 升级 JDK 17 全流程教学指南

    JDK 8 升级 JDK 17 首先已有项目升级是会经历一个较长的调试和自测过程来保证允许和兼容没有问题。先说几个重要的点 遇到问题别放弃 仔细阅读报错,精确到每个单词每一行,不是自己项目的代码也要点进去看看源码到底是为啥报错 明确你项目引入的包,升级到 JDK17 后对应

    2024年02月13日
    浏览(35)
  • Vue2与Vue3的区别与升级指南

    个人笔记不喜勿喷,如有错误感谢评论指正。 一、下面是Vue 2和Vue 3之间的一些主要区别: 1. 性能优化: Vue 3对虚拟DOM进行了重写,提高了渲染性能。它引入了静态树提升和新的编译器,减少了包的大小。 2. 响应式系统的重写: Vue 3中的响应式系统使用了Proxy代理,而不再使

    2024年02月15日
    浏览(33)
  • uni-app 项目支持 vue 3.0 介绍及升级指南

    HBuilderX 3.3.0+  更新uni-app编译器,支持基于 Vite 编译到小程序平台。 至此, uni-app 在 App/H5/小程序 全平台支持 Vue 3.0 开发,且全平台支持 Vite 编译器,下载 HBuilderX 3.3.0+ 体验。 Tips: H5/PC Web 平台:hello-uniapp H5 端已迁移 vue3,点击体验 除支持  vue3  语法特性外, uni-app  特有

    2024年02月10日
    浏览(36)
  • Spring Boot:从入门到实践的全面指南

    1.1 简介:什么是Spring Boot Spring Boot 是一个基于 Spring 框架的开源项目,它的主要设计目标是使开发者能够快速启动和部署 Spring 应用程序。Spring Boot 对 Spring 平台和第三方库采用了\\\"习惯优于配置\\\"的理念,减少了开发人员对配置的需求。 1.2 特性:Spring Boot的优势与特点 Spring

    2024年02月08日
    浏览(25)
  • Ubuntu 20.04 升级Ubuntu 22.04 及更换国内源指南

    打开虚拟机,发现我的ubuntu版本还停留在20.04上,主要平时都用的实体机,树莓派以及Centos系统居多,虚拟机也不是经常使用,今天闲来无事就把它升级到22.04吧,升级到Ubuntu 22.04.1 LTS版本后它可以提供免费安全和维护更新至 2027年4月。 我们点开左下角的应用中心,启动紫色

    2024年01月24日
    浏览(49)
  • 升级篇:超详细ChatGPT(GPT 4.0)论文润色指南+最全提示词/咒语

    在这篇文章中,我将分享如何利用ChatGPT 4.0辅助论文写作的技巧,并根据网上的资料和最新的研究补充更多好用的咒语技巧。 本篇文章持续更新,祝大家写作顺利,如果对你有帮助,欢迎转发、推荐、分享! 温馨提示: 如果严肃对待这件事,请用GPT-4,别用GPT-3.5! 咒语心法

    2023年04月09日
    浏览(63)
  • SpringBoot2.7升级项目到Springboot3.1踩坑指南(jdk17/jdk21)

    由于SpringBoot3.x全面拥抱JDK17,兼容jdk21,jdk17乃是大势所趋。这里是从SpringBoot2.7--SpringBoot3.1踩坑指南。 提前阅读:jdk8升级JDK17避坑指南(适用于SpringBoot2.3—SpringBoot2.7升级) 国内顶级开源项目升级到springBoot3情况,可以作为升级SpringBoot3的风向标。仅对比国内规模使用,落地过

    2024年03月09日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包