Spring Boot 2.6=>2.7 升级整理

版本变更:

1、@SpringBootTest 属性源优先级:使用 @SpringBootTest 注解的测试现在将命令行属性源置于测试属性源之上

在 Spring Boot 2.7 及更高版本中,对 @SpringBootTest 的属性源优先级进行了调整,使得通过命令行传递的属性(args)现在具有比通过 @TestPropertySource 或 @Properties 注解指定的属性更高的优先级。

这意味着,如果存在同名的属性,命令行属性将覆盖通过注解指定的属性。

示例:

@SpringBootTest(properties = "app.name=MyApp")
public class MyTests {@Testpublic void testAppName() {String appName = EnvironmentTestUtils.getEnvironment().getProperty("app.name");assertEquals("MyAppFromCommandLine", appName);}
}

如果在运行测试时,通过命令行指定了 --app.name=MyAppFromCommandLine,则 testAppName 测试方法中的断言将通过,因为命令行属性 MyAppFromCommandLine 将覆盖 @SpringBootTest 注解中指定的属性。

这个变化使得测试环境更加灵活,允许开发者在不修改测试代码的情况下,通过命令行参数来覆盖测试环境中的配置属性。这对于需要根据不同环境(如不同的 CI/CD 阶段或本地开发环境)调整测试配置的情况非常有用。

2、Flyway 模块更新:升级到 Flyway 8.5,并引入了针对不同数据库的新模块

在 Spring Boot 2.7 版本中,对 Flyway 进行了重要的更新,升级到了 Flyway 8.5 版本。这个版本带来了一些重大变化,特别是对于数据库的支持被分割成了针对不同数据库的新模块。这种模块化的做法旨在提供更清晰、更灵活的依赖管理,并且使得 Flyway 能够更好地支持各种数据库系统。

主要变化
  1. 新模块引入: Flyway 8.5 将对不同数据库的支持分割成了独立的模块。如果你的项目中使用了 Flyway 来管理数据库迁移,并且针对特定的数据库(如 MySQL、PostgreSQL 等),你需要在项目的依赖管理文件中明确指定这些新模块。

    例如,如果你使用的是 MySQL,你需要添加如下依赖:

    <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-mysql</artifactId><version>8.5</version>
    </dependency>
  2. 模块化的优势:

    • 更细粒度的控制:开发者可以只包含他们需要的数据库模块,这有助于减少最终应用程序的体积。
    • 更好的维护:每个数据库模块可以独立更新和维护,使得 Flyway 团队能够更快速地响应特定数据库的变化。
    • 清晰的依赖关系:通过明确指定所需的数据库模块,项目的依赖关系变得更加清晰,减少了潜在的冲突和不一致。

3、H2 数据库升级:升级到 H2 2.1.120 版本,该版本与旧版本不兼容,并修复了一些安全漏洞

4、jOOQ:没有开源版本的 jOOQ 同时兼容 Java 8 和 H2 2.x,如果使用 Java 11,建议升级到 jOOQ 3.16 或更高版本

jOOQ 是一个轻量级的 Java ORM(对象关系映射)框架,可用来构建复杂的 SQL 查询。

5、Microsoft SQL Server JDBC 驱动程序 10:升级 MSSQL 驱动程序到 v10,新驱动程序默认启用加密

升级到 MSSQL 驱动程序 v10 带来了以下主要变化:

  1. 默认启用加密:新驱动程序默认启用了 TLS 加密,这意味着所有通过这个驱动程序建立的数据库连接都将使用加密连接。这是一个重要的安全增强,可以保护数据在客户端和服务器之间传输过程中的安全性。如果你的应用之前依赖于未加密的连接,这可能需要你更新应用的配置,以确保它能够正确地使用加密连接。

  2. 证书验证:当 encrypt 设置为 false 但服务器要求加密时,将根据 trustServerCertificate 连接设置验证证书。这确保了即使在非加密模式下,也能对服务器的证书进行验证,增加了一层安全保障。

  3. 连接属性的变更:一些连接属性已经被弃用,例如 aadSecurePrincipalId 和 aadSecurePrincipalSecret。推荐使用用户名和密码代替这些属性进行身份验证。

  4. API 的变更:出于安全考虑,一些 API 被移除,例如 getAADSecretPrincipalId API。这些变更可能需要你更新应用代码,以确保与新版本的驱动程序兼容。

  5. 支持新的 Java 版本:JDBC 驱动程序现在支持 Java 17,除了之前的 JDK 11 和 JDK 8。这为使用最新 Java 版本的开发者提供了更好的支持。

  6. 其他改进和修复:新版本的驱动程序还包含其他一些改进和修复,例如提高了从 SQL Server 检索临时数据类型时的性能,支持具有安全 Enclave 的 Always Encrypted 功能,以及改进了 Azure Active Directory 身份验证的支持。

6、OkHttp 4:由于 OkHttp 3 不再维护,Spring Boot 2.7 升级到 OkHttp 4

7、netty-tcnative 分离依赖管理:移除了对 netty-tcnative 的单独依赖管理

8、Spring Data MongoDB 嵌入式功能配置属性移除:移除了 spring.mongodb.embedded.features 配置属性

这个属性用于配置嵌入式 MongoDB 的特定功能。

嵌入式 MongoDB 是一个轻量级的 MongoDB 实例,它被用于测试,可以快速启动和停止。在 Spring Boot 应用中,它通常用于测试而不需要一个完整的 MongoDB 服务器。在旧版本中,spring.mongodb.embedded.features 属性允许你指定要启用的嵌入式 MongoDB 的特性。

9、Servlet-specific Mustache 属性:一些特定于 Servlet 的 Mustache 属性已被弃用,并引入了替代属性

Mustache是一个无逻辑的模板引擎,用于创建动态HTML内容。它由{{}}包围的标签名称组成,不支持if-else语句和for循环等逻辑操作。Mustache的Java API可以用于生成动态内容,并且可以作为Maven依赖项添加到项目中‌。

以下是一些被弃用和替代的属性:

  1. spring.mustache.allow-request-override - 被替换为 spring.mustache.servlet.allow-request-override
  2. spring.mustache.allow-session-override - 被替换为 spring.mustache.servlet.allow-session-override
  3. spring.mustache.cache - 被替换为 spring.mustache.servlet.cache
  4. spring.mustache.content-type - 被替换为 spring.mustache.servlet.content-type
  5. spring.mustache.expose-request-attributes - 被替换为 spring.mustache.servlet.expose-request-attributes
  6. spring.mustache.expose-session-attributes - 被替换为 spring.mustache.servlet.expose-session-attributes
  7. spring.mustache.expose-spring-macro-helpers - 被替换为 spring.mustache.servlet.expose-spring-macro-helpers

10、ReactiveElasticsearchTemplate 默认索引选项:更改了自动配置的 ReactiveElasticsearchTemplate 的默认索引选项

ReactiveElasticsearchTemplate是Spring Data Elasticsearch提供的一个响应式的Elasticsearch操作模板,用于检索命中和聚合数据。它基于Reactive Streams和Elasticsearch的Reactive REST客户端实现,可以方便地进行异步、非阻塞的数据操作。

使用ReactiveElasticsearchTemplate检索命中和聚合的步骤如下:

  1. 引入依赖:在项目的构建文件中添加Spring Data Elasticsearch和Elasticsearch的依赖。
  2. 配置连接:在应用的配置文件中配置Elasticsearch的连接信息,包括主机地址、端口号、索引名称等。
  3. 创建Elasticsearch实体类:根据需要检索和聚合的数据结构,在Java代码中创建对应的Elasticsearch实体类,并使用注解标记字段与Elasticsearch索引的映射关系。
  4. 创建ReactiveElasticsearchTemplate:在需要使用ReactiveElasticsearchTemplate的类中,通过注入的方式创建ReactiveElasticsearchTemplate对象。
  5. 编写查询和聚合操作:使用ReactiveElasticsearchTemplate提供的方法,结合Elasticsearch的查询语法和聚合语法,编写检索命中和聚合的操作。
  6. 执行操作并处理结果:调用ReactiveElasticsearchTemplate的方法执行操作,并通过响应式编程的方式处理返回的结果流。可以使用操作符进行数据转换、过滤、排序等操作,最终得到符合需求的结果。

ReactiveElasticsearchTemplate的优势在于它提供了响应式的操作方式,能够更好地适应高并发、大数据量的场景。它还提供了丰富的查询和聚合操作方法,可以满足各种复杂的数据检索和分析需求。

ReactiveElasticsearchTemplate的应用场景包括但不限于:

  1. 实时日志分析:通过实时检索和聚合Elasticsearch中的日志数据,进行实时监控和分析。
  2. 数据可视化:将Elasticsearch中的数据进行可视化展示,例如生成图表、仪表盘等。
  3. 搜索引擎:构建全文搜索引擎,支持关键词搜索、过滤、排序等功能。
  4. 推荐系统:基于用户行为和兴趣偏好,使用ReactiveElasticsearchTemplate进行数据检索和聚合,实现个性化推荐。

11、MongoDB 属性优先级:spring.data.mongodb.uri 属性现在优先于其他单独的属性

12、在 Maven 进程中运行应用程序:spring-boot:run 和 spring-boot:start Maven 插件目标默认在 forked 进程中运行应用程序,禁用此行为的 fork 属性已被弃用

13、有序退出代码生成器:ExitCodeGenerators 现在根据它们的 Ordered 实现和 @Order 注解进行排序。

14、度量标签键重命名:将 camelCase 风格的度量标签键重命名为符合 Micrometer 推荐的全小写和使用点分隔的风格

15、从 Spring Security 5.7 开始,弃用了 WebSecurityConfigurerAdapter

从 Spring Security 5.7 开始,WebSecurityConfigurerAdapter 已经被弃用。这是 Spring Security 项目为了进一步简化安全性配置而做出的变更。在 Spring Security 5.7 及更高版本中,推荐使用基于 Java 的配置方式,而不是继承 WebSecurityConfigurerAdapter

弃用原因:
  1. WebSecurityConfigurerAdapter 需要在配置类中重写多个方法,这增加了配置的复杂性
  2. 新的配置方式旨在简化安全性设置,使其更加直观和易于理解
推荐的替代方案:
  1. 使用 SecurityFilterChain Bean 来配置安全性。这种方式允许你直接在 Spring 配置中声明安全性规则,而不是通过重写方法
  2. 对于不需要自定义过滤器链的场景,可以使用 HttpSecurity Bean 来配置安全性
示例配置:
1、使用 SecurityFilterChain Bean 
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeRequests(authorizeRequests ->authorizeRequests.antMatchers("/public/**").permitAll().anyRequest().authenticated()).httpBasic(withDefaults());return http.build();}
}
2、使用 HttpSecurity Bean 
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Autowiredpublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests(authorizeRequests ->authorizeRequests.antMatchers("/public/**").permitAll().anyRequest().authenticated()).httpBasic(withDefaults());}
}

新特性

1、Spring GraphQL 启动器:引入了新的 spring-boot-starter-graphql 启动器。

2、RabbitStreamTemplate 支持:如果设置了 spring.rabbitmq.stream.name 属性,将自动配置 RabbitStreamTemplate

3、Hazelcast @SpringAware 支持:自动配置的 Hazelcast 嵌入式服务器现在默认使用 SpringManagerContext

4、操作系统信息在 Info 端点:可以公开有关操作系统的信息。

5、Java 供应商信息在 Info 端点:改进了现有的 JavaInfoContributor,提供了一个专用的部分用于供应商信息。

6、在 RSocket 处理方法中访问经过身份验证的主体:RSocket 处理方法现在可以注入 @Authenticated Principal

7、无需 OIDC SDK 即可进行不透明令牌内省:如果使用不透明令牌内省在 OAuth2 资源服务器中,自动配置的内省器不再需要依赖 com.nimbusds:oauth2-oidc-sdk

8、@DataCouchbaseTest 和 @DataElasticsearchTest:引入了用于测试使用 Spring Data Couchbase 和 Spring Data Elasticsearch 的应用程序的新的测试注解。

这些注解专门设计用于测试环境,它们提供了一种快速且高效的方式来配置和初始化这些 NoSQL 数据库的测试实例。

1、@DataCouchbaseTest

这个注解自动配置了 Spring Data Couchbase 的测试环境,允许开发者编写针对 Couchbase 数据库的集成测试。

它通常与 @Document 注解一起使用,后者用于标识与 Couchbase 数据库交互的实体类。

2、@DataElasticsearchTest

这个注解自动配置了 Spring Data Elasticsearch 的测试环境,使得开发者可以轻松编写和执行针对 Elasticsearch 的集成测试。

它与 @Document 注解协同工作,后者定义了映射到 Elasticsearch 索引的实体类。

这些注解的引入,不仅简化了测试配置,还提高了测试的可读性和维护性。开发者可以通过简单地添加这些注解来启用对相应数据库的测试支持,而无需手动编写大量的配置代码。

示例:

 @DataElasticsearchTest 的测试类如下所示:

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.data.elasticsearch.core.query.QueryResults;
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchMappingContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.test.context.ActiveProfiles;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;// 指定这是一个使用 Elasticsearch 的测试
@DataElasticsearchTest// 告诉 Spring Boot 测试框架使用哪个配置文件
@ActiveProfiles("test")public class ElasticsearchTests {@Autowiredprivate ElasticsearchRestTemplate elasticsearchTemplate;@Autowiredprivate ElasticsearchMappingContext mappingContext;@Autowiredprivate YourElasticsearchRepository yourRepository; // 注入你的 Elasticsearch 仓库@Document(indexName = "your_index")public static class YourDocument {private String id;private String content;// getters and setters}public interface YourElasticsearchRepository extends ElasticsearchRepository<YourDocument, String> {// 可以添加自定义查询方法}@Testpublic void testSaveAndFind() throws Exception {YourDocument document = new YourDocument();document.setId("1");document.setContent("Hello Elasticsearch");// 保存文档elasticsearchTemplate.save(document);// 验证文档是否被正确保存Query query = new Query();QueryResults<YourDocument> results = elasticsearchTemplate.search(query, YourDocument.class);assertThat(results.getTotalHits()).isEqualTo(1);assertThat(results.getContent().get(0).getId()).isEqualTo(document.getId());}
}

在这个示例中:

  • @DataElasticsearchTest 注解被用于自动配置 Elasticsearch 测试环境。
  • YourDocument 是一个简单的文档类,使用 @Document 注解标记,表示它将被映射到 Elasticsearch 的索引中。
  • YourElasticsearchRepository 是一个继承自 ElasticsearchRepository 的接口,用于操作 YourDocument
  • 在测试方法 testSaveAndFind 中,我们创建了一个 YourDocument 实例,使用 ElasticsearchRestTemplate 保存它,并验证它是否被正确索引。

依赖升级

Spring Boot 2.7 升级了多个 Spring 项目到新版本,包括 Spring Data 2021.2、Spring HATEOAS 1.5、Spring LDAP 2.4、Spring Security 5.7 和 Spring Session 2021.2。此外,还升级了许多第三方依赖。

其他变更

支持 Podman 作为构建镜像的容器引擎

添加了对 Cache2k 的依赖管理和自动配置

使用 PEM 编码证书简化了嵌入式 Web 服务器的 SSL 配置

弃用了 Elasticsearch 的 RestHighLevelClient 并推荐使用低级别的 RestClient

R2DBC 驱动程序变更,特别是 PostgreSQL 和 MySQL 驱动程序的变更

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】深入理解Python中的原型设计模式

深入理解Python中的原型设计模式 在软件开发中&#xff0c;有时需要创建对象的过程非常复杂或者代价较高&#xff0c;而在同一类对象的实例之间有很多重复的属性。为了避免重复构造对象&#xff0c;提升性能和效率&#xff0c;原型设计模式&#xff08;Prototype Pattern&…

Transformer图解以及相关的概念

前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架&#xff0c;同时大部分LLM也是使用其进行训练生成模型&#xff0c;所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面…

asp.net Core 自定义中间件

内联中间件 中间件转移到类中 推荐中间件通过IApplicationBuilder 公开中间件 使用扩展方法 调用中间件 含有依赖项的 》》》中间件 参考资料

中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单

2024年10月17日&#xff0c;北京-随着工业互联网的迅猛发展&#xff0c;网络安全已成为国家关注的重点议题之一。日前&#xff0c;工业和信息化部&#xff08;工信部&#xff09;公布了2023年工业互联网试点示范名单&#xff0c;中企网络通信技术有限公司&#xff08;简称“中企…

读数据工程之道:设计和构建健壮的数据系统12开源软件

1. 开源软件 1.1. 开源软件(Open Source Software&#xff0c;OSS)是一种软件发行模式&#xff0c;在这种模式下&#xff0c;软件和底层代码库通常在特定的许可条款下可供普遍开发者使用 1.2. 社区管理的开源软件 1.2.1. 大部分开源软件项目…

【Qt】信号和槽——信号和槽的概念、信号和槽的使用、信号和槽的优缺点、自定义信号和槽、信号和槽的断开

文章目录 Qt1. 信号和槽的概念2. 信号和槽的使用3. 信号和槽的优缺点4. 自定义信号和槽5. 信号和槽的断开 Qt 1. 信号和槽的概念 信号是什么&#xff1a; 在Linux中&#xff0c;我们知道信号是一种异步的事件通知机制&#xff0c;用于通知进程某个事件已经发生。它是进程间通信…

MOE论文详解(4)-GLaM

2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…

opcode从零开始

opcode从零开始 参考资料: Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4() Intel64和IA-32架构软件开发人员手册组合卷&#xff1a;1,2a, 2B, 2C, 2D, 3A, 3B, 3C, 3D&#xff0c;和4 罗聪–c…

wordart.top - 轻松创建令人惊叹的文字云!

轻松创建令人惊叹的文字云/词云图&#xff01;适合营销人员、教育工作者、数据爱好者、创意人员、商务人士、活动策划者和社交媒体专家等多种用户群体。支持海量模版库、自定义模板、文本快速提取、精准关键字调整、词云Gif动图制作、词云视频制作、图片一键分享及数据轻松导入…

机器学习与神经网络:诺贝尔物理学奖的新篇章

机器学习与神经网络&#xff1a;诺贝尔物理学奖的新篇章 Introduction Recently, the 2024 Nobel Prize in Physics was awarded to researchers in the field of machine learning and neural networks, marking a historic first. Traditionally, this prestigious award h…

网盘如何拉新方法教程

网盘拉新是指通过各种推广方式吸引新用户注册和使用网盘服务的过程。以下是对网盘拉新的详细解释&#xff1a; 一、网盘拉新的背景与意义 背景&#xff1a;随着互联网的发展&#xff0c;网盘作为一种基于云计算技术的存储服务&#xff0c;因其便捷性和高效性而备受欢迎。为了…

单点登录的要点

单点登录&#xff08;Single Sign On&#xff0c;简称SSO&#xff09;是一种身份验证和授权机制&#xff0c;允许用户使用一组凭据&#xff08;如用户名和密码&#xff09;来访问多个应用程序或系统&#xff0c;而无需在每个应用程序中单独进行身份验证。以下是对单点登录的详细…

第十届MathorCup高校数学建模挑战赛-A题:基于 logistic 回归和 DEA 模型对无车承运平台线路定价问题的优化和评价

目录 摘 要 一、问题重述 1.1 问题背景 1.2 目标任务 二、问题分析 三、模型假设 四、符号说明 五、模型建立和求解 5.1 问题一的分析和建模 5.1.1 成分初步筛选 5.1.2 缺失值处理 5.1.3 相关性分析 5.1.4 主成分分析 5.2 问题二的分析和建模 5.2.1 数据预处理 …

Linux debian 系桌面系统安装软件方式介绍

debian 系软件的安装方式多种多样&#xff0c;但对于不想花太多时间配置各种环境和依赖的用户来说&#xff0c;建议直接使用“新立得包管理器”安装&#xff0c;既方便又直观。 本文将以常用软件为例&#xff0c;介绍常用的几种软件安装方式。 1. 使用新立得包管理器安装&…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合&#xff0c;它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下&#xff1a; 1. 对于数据开发者来说&#xff0c;数据字典包含了关于数据结构和内容的清晰…

15分钟学Go 第4天:Go的基本语法

第4天&#xff1a;基本语法 在这一部分&#xff0c;将讨论Go语言的基本语法&#xff0c;了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单&#xff0c;主要包括&#xff1a; 包声明导入语句函数语句 1.1 包声…

react+video:限制快进、倍速、画中画

实现代码&#xff1a; <video ref{videoRef} src{videoUrl} className{style.video} controls onRateChange{rateChange} onPlay{playVideo} onPause{pauseVideo} onTimeUpdate{timeUpdate} disablePictureInPicture playsInline poster{poster} controlsList"nodownl…

卸载Python

1、查看安装框架位置并删除 Sudo rm -rf /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8 2、查看应用并删除 在 /Applications/Python 3.x 看是否存在&#xff0c;如果存在并删除。 3、删除软连接 ls -l /usr/bin/py* 或 ls -…

MATLAB电车(宝马 i3)卸载电池再利用电气模型分析

&#x1f3af;要点 特性测试评估卸载电池性能以及不同温度下电池容量和电阻。使用两种电气模型评估和模拟卸载电池可利用性能。从宝马 i3模块中提取三星三元锂方形电池作为评估电池&#xff1a;容量测量、电阻测量&#xff0c;对比新电池性能。使用的等效电路模型以及用于校准…

数据结构编程实践20讲(Python版)—17散列

本文目录 17 散列(Hashing)S1 说明特点应用领域S2 示例:字符串哈希S2 示例:文件、图片哈希S3 应用1:食品安全追溯S4 应用2:在线内容版权保护S5 应用3:社交媒体内容审核往期链接 01 数组02 链表03 栈04 队列05 二叉树06 二叉搜索树07 AVL树08 红黑树09 B树10 B+树11 线段…