Spring Bean Scope 指南

在本教程中,将带你学习 Spring Framework 的重要组成部分 Spring Bean Scope(作用域)。你将了解它们是什么、如何工作以及何时使用。最后,你将对 Spring Bean Scope 有一个清晰的了解,从而帮助你构建更好的 Spring 应用程序。 Spring Bean 介绍 在 Spring Framework 的世界里,“Spring Bean” 是一个非常重要的术语。从本质上讲,Spring Bean 是由 Spring IoC(反转控制)容器实例化、组装和管理的对象。这些 Bean 是根据你提供给容器的配置元数据创建的,例如,以 XML 定义或源代码注解的形式。 Bean 可以看作是任何 Spring 应用程序的基本构件。它们是构成应用程序主干的对象,由 Spring IoC 容器管理。这些 Bean 是根据项目中提供的定义创建的,用于履行应用程序中的各种角色,如 service 类、数据访问对象 (DAO)、Spring MVC Controller 等对象,甚至是简单对象。 Spring Bean Scope 是什么 Spring Bean Scope(或换句话说,Bean 的作用域)决定了这些 Bean 在应用程序各种上下文中的生命周期和可见性。 Spring Bean 的 scope 定义了 Bean 存在的边界、与之绑定的上下文以及存活时间。简而言之,它定义了何时创建 Bean 的新实例,以及何时删除该特定实例。 Spring 提供多种 scope,例如: Singleton Prototype Request Session Application Websocket 每个 scope 都意味着不同的生命周期和它们定义的 Bean 的可见性。正确理解和使用这些 scope 对于构建稳健高效的 Spring 应用程序至关重要。

Spring 6.1的新特性:RestClient

Spring Framework 6.1 M2 引入了 RestClient,一个新的同步HTTP客户端。顾名思义,RestClient 提供了 WebClient 的 fluent API和 RestTemplate 的基础架构。 14年前,当 RestTemplate 在 Spring Framework 3.0 中被引入时,我们很快发现在一个类似模板的类中暴露 HTTP 的所有功能会导致过多的重载方法。因此,在 Spring Framework 5 中,我们为响应式的 WebClient 使用了 fluent API。通过 RestClient,我们引入了一个 HTTP 客户端,它提供了类似于 WebClient 的API,并使用了 message converter、request factory、拦截器以及 RestTemplate 的其他底层组件。 创建 RestClient 你可以使用静态的create方法创建一个RestClient。你也可以使用RestClient::builder来获得一个具有更多选项的 builder,比如指定要使用的HTTP客户端,设置默认的URL、path 变量和 header,或者注册拦截器和初始化器(initializer)。 使用 RestClient::create(RestTemplate),你可以使用现有 RestTemplate 的配置初始化 RestClient。 Retrieve 让我们创建一个 RestClient,用它来设置一个基本的 GET 请求,并使用 retrieve 以字符串形式获取网站的内容: RestClient restClient = RestClient.create(); String result = restClient.get() .uri("https://example.com") .retrieve() .body(String.class); System.out.println(result); 如果你对响应状态码和 header 感兴趣,而不仅仅是对响应内容感兴趣,你可以使用 toEntity 获取 ResponseEntity:

Spring Cloud Gateway 的主动健康检查策略

如今,应用程序被构建为小型独立上游服务的集合。这加快了开发速度,并使模块专注于特定职责,提高了质量。这是使用微服务方法的主要优势之一。然而,从一个服务跳转到另一个服务会增加额外的延迟,当服务没有响应时,这种延迟会显著增加。 如果你运行的是微服务,你需要防止上游服务在工作不正常时被调用。即使使用断路器(circuit breaker)模式,也会对响应时间造成影响。因此,有时最好主动检查上游服务,以验证它们是否在需要之前就已准备就绪。 健康检查是确定服务是否能够根据其状态作出正确响应、防止超时和错误的一种方法。 被动健康检查 在请求处理过程中进行。如果服务最终处于不健康状态,应用程序将返回失败,并标记端点不健康。这会增加额外的延迟。 主动健康检查 将在接收请求之前在后台检查并放弃不健康的服务。它不会增加额外的延迟。 最后但并非最不重要的一点是,这些功能可与断路器库结合使用,以便立即 fall back 到另一个 endpoint ,而不会受到首次失误的惩罚。 目标是通过使用负载均策略,将路由请求转发到健康的上游服务: 本文章分为两部分: “你需要的 Spring 功能” - 描述你需要哪些 Spring 功能来获得主动的健康检查。 “为你的服务注册端点”- 参考一些将一个或多个端点添加到路由中的方法。 1、你需要的 Spring 功能 Spring 的一些功能可以帮助你进行主动的健康检查: Spring Cloud Load Balancer(SLB)是客户端负载均衡器,可在不同上游服务端点之间均衡流量。它是 Spring Cloud 项目 的一部分,包含在 spring-cloud-commons 库中(参见 SLB文档)。 客户端服务发现功能可让客户端查找服务并与之通信,而无需硬编码主机名和端口。spring-cloud-commons 库中也包含该功能(参见 服务发现文档)。 Spring Cloud Gateway 为在 Spring 和 Java 之上构建API网关提供了一个库。它通过 LoadBalancerClientFilter / ReactiveLoadBalancerClientFilter 全局过滤器支持上述功能。在本文章中,你将看到使用这些全局过滤器的不同方法。 首先,让我们来了解其中的一些功能。 Spring Cloud Load Balancer filter Spring Cloud 中包含用于负载均衡的全局过滤器,可通过使用特殊的 URI 符号激活:lb://your-service-name。 spring: cloud: gateway: routes: - id: myRoute uri: lb://your-service-name predicates: - Path=/service/** 负载均衡器过滤器 ReactiveLoadBalancerClientFilter (用于响应式应用程序)将检测 URI 并将其替换为与 your-service-name 相关的可用端点。

在 JPA 和 Sping Data JPA 中使用 Java Record

1、概览 在本教程中,我们将探讨如何在 JPA 中使用 Java Record,包括以下内容。 为什么 Record 不能作为 Entity 使用。 在 JPA 中使用 Record。 在 Spring Boot 应用中使用 Spring Data JPA 和 Record。 2、Record 和 Enttiy Record 是不可变的,用于存储数据。它们包含字段、全参数构造函数、getter、toString 和 equals/hashCode 方法。由于它们是不可变的,因此没有 setter。由于其语法简洁,在 Java 中经常被用作数据传输对象(DTO)。 Entity(实体)是映射到数据库表的类。它们用于表示数据库中的条目。它们的字段被映射到数据库表中的列。 2.1、Record 不能作为 Entity 实体由 JPA provider 处理。JPA provider 负责创建数据库表,将实体映射到表,并将实体持久化到数据库。在流行的 JPA provider(如 Hibernate)中,实体是使用代理来创建和管理的。 代理是在运行时生成并继承实体类的类。这些代理依赖于实体类的无参数构造函数和 setter。由于 Record 不具有这些,所以它们不能用作实体。 2.2、在 JPA 中使用 Record 的其他方法 由于在 Java 中使用 Record 的简便性和安全性,在 JPA 中以其他方式使用 Record 可能是有益的。 在 JPA中,我们可以通过以下方式使用 Record: 将查询结果转换为 Record。 使用 Record 作为DTO在各个层之间传输数据。 将实体转换为 Record。 3、项目设置 我们将使用 Spring Boot 创建一个使用 JPA 和 Spring Data JPA 的简单应用程序。然后,我们将了解在与数据库交互时使用 Record 的几种方法。

Spring 快速入门指南

本入门指南将会引导你如何从零开始建立一个 Spring 应用,并提供经典的“Hello World!”端点,可供任何浏览器都访问。 环境预备 你需要在本地安装好 Java™ 开发工具包(JDK),以及一个 IDE,如 IntelliJ IDEA、Spring Tools、Visual Studio Code 或 Eclipse。 第 1 步:创建新的 Spring Boot 项目 通过 start.springboot.io 来创建一个“web”项目。在“Dependencies”对话框中搜索并添加 “web”依赖项,如截图所示。点击“Generate”按钮,下载压缩包,并将其解压到电脑上的一个文件夹。 start.springboot.io 创建的项目包含 Spring Boot,这个框架使你不需要太多的代码或配置就可以让 Spring 在你的应用中工作。Spring Boot 是启动 Spring 项目的最快速和最流行的方式。 第 2 步:添加代码 在你的 IDE 中打开项目,找到 src/main/java/com/example/demo 文件夹中的 DemoApplication.java 文件。现在改变该文件的内容,添加下面代码中所示的额外方法和注解。你可以复制并粘贴该代码,或者手动输入该代码。 package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.