Spring Cloud 2023.0.0(代号 Leyton)发布

Spring Cloud 2023.0.0(代号 Leyton)RELEASE 版本已发布。你可以在 Maven Central 中找到该版本。 欲了解更多细节,可以查阅 2023.0 发布说明。 2023.0 版本中的显著变化 此版本基于 Spring Boot 3.2.0。 点击 此处 查看 2023.0.0 中的所有 issues。 Spring Cloud Gateway 2023.0 中包含与 Servlet/Spring MVC 兼容的 Spring Gateway Server MVC(issue,初始 PR) Gateway Actuator 发现功能增强 (PR 3147) Spring Cloud Function 现在可以将 REST 应用程部署为 AWS Lambdas 或 Azure Functions 使用 spring-cloud-function-web 将函数(Function)部署为 REST 端点时的 CRUD 映射 Spring Cloud Openfeign 支持 Java HttpClient(#689) Spring Cloud Commons 重新启动时的刷新范围(Refresh Scope) - 为适应 JVM 检查点重启时的环境变化而量身定制的功能(PR 1266) 为新的 RestClient 提供负载均衡支持 (1293) 确定性子集负载均衡算法,用于限制实例数量(1288)。 Spring Cloud Config Config Server 支持 Native image(PR 2361) Spring Cloud Kubernetes 将 fabric8 升级至 6.

CDS(Class Data Sharing)在 Spring 6.1 中的应用

正如 官方文档 所述,类数据共享(CDS)通过将类元数据缓存在 Archive(归档/存档) 文件中,使其可以快速预加载到新启动的 JVM 中,从而帮助缩短 JVM 的启动时间和内存占用。这加快了类加载速度,而类加载速度是启动时间的一个重要因素。大多数最新的 JDK 发行版中预先打包了默认的 CDS 归档,其中包含了常见 JDK 类的元数据。你也可以创建自定义的 CDS 归档,以加快类在自己应用中的加载速度。 GraalVM 原生镜像 和 Project CRaC 都能让 Spring Boot 应用在几十毫秒内启动。那么,为什么要关注 CDS 呢? 主要有三个原因: 它是 OpenJDK 主线中成熟且可用于生产的技术,与 GraalVM 和 Project CRaC 相比,它更易于使用,因为它具有较少的限制和副作用。 正如 Brian Goetz 在他在 Devoxx 上的 Project Leyden 演讲 中提到的:“大多数人今天不使用 CDS,但可能应该使用,因为他们可以通过相对较少的工作获得合理的启动性能提升。” 在每一个新的 JVM 版本中,这项技术都会变得越来越好,Project Leyden 的目标是在不久的将来增加更多的优势。 接下来,让我们一起探究 CDS 能为你的 Spring 应用带来什么? 在 Spring 6.1 中引入 CDS 初始支持 Spring 6.1 带来了一个新的 “类数据共享” 文档章节,解释了优化应用的两个步骤: 使用新增的 -Dspring.

Thymeleaf 变量

1、简介 本文将通过一个 Spring Boot 示例带你了解 Thymeleaf 中的变量。 2、Maven 依赖 要使用 Thymeleaf,需要添加 spring-boot-starter-thymeleaf 和 spring-boot-starter-web 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 3、Web Controller 首先,创建一个带有 GET 端点的 Web Controller,该端点返回一个包含文章列表的页面。 @GetMapping 方法只接受一个参数 - Model。它包含所有可在 Thymeleaf 模板中使用的全局变量。在本例中,Model 只有一个参数,即文章列表。 Article 类由两个 String 字段(name 和 url)组成: public class Article { private String name; private String url; // 构造函数、get、set 方法省略 } Controller 方法的返回值应该是要渲染的 Thymeleaf 模板的名称。该名称应与 src/resource/template 目录中的 HTML 文件相对应。在本例中,就是 src/resource/template/articles-list.html。 Controller 如下: @Controller @RequestMapping("/api/articles") public class ArticlesController { @GetMapping public String allArticles(Model model) { model.

在 Docker Compose 中运行 PostgreSQL 和 Spring Boot

1、概览 本文将带你了解如何使用 Docker Compose 来运行 Spring Boot 和 PostgreSQL。 2、创建 Spring Boot 应用 从 Spring Initializer 创建 Spring Boot 项目,添加 PostgreSQL 驱动和 Spring Data JPA 依赖。下载生成的 ZIP 文件并解压到文件夹后,就可以运行应用了: ./mvnw spring-boot:run 应用启动失败,因为连接数据库失败: *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class 3、Dockerfile 在使用 Docker Compose 启动 PostgreSQL 之前,需要将 Spring Boot 应用转化为 Docker 镜像。第一步是将应用打包为 JAR 文件:

Spring Webflux 教程

1、概览 Spring 5 引入了 Spring WebFlux 框架,为 Web 应用提供响应式编程支持。 本文将带你了解如何使用响应式 Web 组件 RestController 和 WebClient 创建一个小型响应式 REST 应用,以及如何使用 Spring Security 来保护响应式端点。 2、Spring WebFlux 框架 Spring WebFlux 内部使用 Project Reactor 及其 Publisher(发布者)实现、Flux 和 Mono。 WebFlux 支持两种编程模式: 基于注解的响应式组件 函数式路由和处理 本文重点介绍基于注解的响应式组件。 3、依赖 首先从 spring-boot-starter-webflux 依赖开始。 它会传递依赖其他所有的依赖: spring-boot 和 spring-boot-starter,用于基本的 Spring Boot 应用设置 spring-webflux 框架 响应式流(Reactive Stream)所需的 reactor-core 以及 reactor-netty <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <version>3.1.2</version> </dependency> 可从 Maven Central 下载最新的 spring-boot-starter-webflux。 4、响应式 REST 应用 现在,使用 Spring WebFlux 构建一个非常简单的响应式 REST EmployeeManagement 应用:

Spring Boot Actuator

1、概览 本文将带你了解 Spring Boot Actuator,以及如何在 Spring Boot 和 WebFlux 中使用、配置和扩展这个监控工具,充分利用响应式编程模型。 2、Actuator 是啥? 从本质上讲,Actuator 为应用带来了生产就绪的功能。 有了 Actuator 后,监控应用程序、收集指标、了解流量或数据库状态就变得易如反掌。 这个库的主要好处是,可以获得生产级工具,而无需自己实际实现这些功能。 Actuator 主要公开应用的运行信息 - 健康状况、指标、信息、转储(dump)、环境等。它使用 HTTP 端点或 JMX Bean 与客户端进行交互。 一旦在 classpath 中添加了该依赖,多个端点就已经开箱即用。与大多数 Spring 模块一样,可以通过多种方式轻松配置或扩展它。 3、入门 首先,在 Spring Boot 项目中添加 spring-boot-actuator 依赖,以启用 Spring Boot Actuator。 Mave: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 该依赖的版本号已经在 spring-boot-starter-parent 中声明了,所以只要你继承了 Parent 项目,不需要手动声明版本号。 Actuator 与技术无关,Actuator 将其模型定义为可插拔和可扩展的,而不依赖 MVC。因此,可以利用 MVC 和 WebFlux 作为底层 Web 实现,还可以通过实现正确的适配器来添加新的实现。也支持 JMX,无需任何额外代码即可暴露端点。 4、端点配置 4.2、默认端点和安全配置 Actuator 禁用了大部分端点。因此,默认情况下只有 /health 和 /info 这两个端点可用。

Java 使用 AES 进行加密和解密

在 上一文 一文中,介绍了如何在 Java 中使用 RSA 非对称加密算法 进行加密、解密、生成数字签名和验签。 和 “非对称加密算法” 对应的就是 “对称加密算法”。非对称加密算法(如 RSA)的密钥通常由 公钥 和 私钥 组成,且遵守公钥加密、私钥解密的模式。而对称加密算法则只有一个密钥,加密和解密都使用同一个密钥。 对称加密算法中,比较安全且流行的就是 AES 算法,本文将会带你了解如何在 Java 中使用 AES 对数据进行加密和解密。 AES 介绍 AES(Advanced Encryption Standard)是一种对称加密算法,也被称为高级加密标准。它是一种广泛使用的加密算法,具有高度的安全性和效率,已被广泛应用于各种领域,包括网络通信、数据存储和加密协议等。AES 使用相同的密钥进行加密和解密操作,因此被归类为对称加密算法。 密钥 可以使用 Java 中的 javax.crypto.KeyGenerator API 来生成随机的 AES 密钥。 package cn.springdoc.demo.test; import java.security.SecureRandom; import java.util.Base64; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class Main { public static void main(String[] args) throws Exception { // 获取 AES 密钥生成器 KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); // 设置密钥长度和随机源 keyGenerator.

Spring MVC 教程

1、概览 这是一个简单的 Spring MVC 教程,介绍如何通过基于 Java 的配置和 XML 配置来建立 Spring MVC 项目。 Spring MVC 依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework.version}</version> </dependency> 2、Spring MVC 是啥? 顾名思义,它是 Spring 框架中处理模型(Model)- 视图(View)- 控制器(Controller)或 MVC 模式的一个模块。它结合了 MVC 模式的所有优点和 Spring 的便利性。 Spring 使用其 DispatcherServlet 前控制器模式实现 MVC。 简而言之,DispatcherServlet 是将请求路由到预定目的地的主要控制器。Model 只是应用的数据,而视图则由各种模板引擎来表示。 3、使用 Java 配置的 Spring MVC 要通过 Java 配置类启用 Spring MVC 支持,只需添加 @EnableWebMvc 注解即可: @EnableWebMvc @Configuration public class WebConfig { /// ... } 这将设置 MVC 项目所需的基本支持,如注册处理器、映射器、类型转换器、验证支持、消息转换器和异常处理。

基于 XML 配置的 Spring AOP 教程

1、简介 本文将带你了解 Spring 中的 AOP(面向切面编程),并学习如何在实际场景中使用这一强大工具。 在使用 Spring AOP 开发时,还可以利用 @AspectJ 的注解,但本文重点介绍 Spring AOP 基于 XML 的核心配置。 2、概览 AOP 是一种编程范式,旨在通过分离横切关注点来提高模块化程度。它通过在不修改代码本身的情况下为现有代码添加额外的行为来实现这一目标。 Spring 的 AOP 框架 可以帮助我们实现这些切面关注点。 3、Maven 依赖 首先,在 pom.xml 中添加 Spring 的 AOP 依赖: <!-- Spring Boot 应用 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> </dependencies> <!-- Spring 应用 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>6.1.1</version> </dependency> </dependencies> 可以在 Maven 仓库中查询到最新的版本。 4、AOP 概念和术语 简要回顾一下 AOP 的特定概念和术语: 4.1、业务对象 业务对象是一个具有正常业务逻辑的普通类。 来看一个简单的业务对象示例,只需将两个数字相加:

Spring Cloud Gateway 教程

1、概览 本文将带你了解 Spring Cloud Gateway 的主要功能,它是一个基于 Spring Boot 和 Project Reactor 的网关。 Spring Cloud Gateway 提供开箱即用的路由机制,通常用于微服务应用中,把多个服务隐藏在 “Facade”(门面设计模式)后面。 2、路由处理器 Spring Cloud Gateway 专注于路由请求,它将请求转发给网关 Handler Mapping,由其决定如何处理与特定路由相匹配的请求。 从一个快速示例开始,看看 Gateway Handler 如何使用 RouteLocator 解析路由配置: @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("r1", r -> r.host("**.baeldung.com") .and() .path("/baeldung") .uri("http://baeldung.com")) .route(r -> r.host("**.baeldung.com") .and() .path("/myOtherRouting") .filters(f -> f.prefixPath("/myPrefix")) .uri("http://othersite.com") .id("myOtherID")) .build(); } 注意,有几个核心的 API: Route - 网关的主要 API。它由给定的标识(ID)、目的地(URI)和一组 Predicate 和 Filter 定义 Predicate - Java 8 Predicate ,用于使用 Header、方法或参数匹配 HTTP 请求 Filter - 标准的 Spring WebFilter 3、动态路由 与 Zuul 一样,Spring Cloud Gateway 也提供了将请求路由到不同服务的方法。