1、简介 本文将带你了解如何在 Spring Boot 中配置 Swagger UI,使其在调用 API 时包含 JWT(JSON Web Token)。
2、Maven 依赖 本例使用 springdoc-openapi-ui 库,它包含了使用 Swagger 和 Swagger UI 所需的所有依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.7.0</version> </dependency> 3、Swagger 配置 首先,需要配置 JWT SecurityScheme:
private SecurityScheme createAPIKeyScheme() { return new SecurityScheme().type(SecurityScheme.Type.HTTP) .bearerFormat("JWT") .scheme("bearer"); } 然后,配置 OpenAPI Bean,包含 API Info 和 Security Scheme:
@Bean public OpenAPI openAPI() { return new OpenAPI().addSecurityItem(new SecurityRequirement(). addList("Bearer Authentication")) .components(new Components().addSecuritySchemes ("Bearer Authentication", createAPIKeyScheme())) .
1、概览 DispatcherServlet 是 Spring Web 应用的前端控制器(Front Controller)。它用于在 Spring MVC 中创建 Web 应用和 REST 服务。在传统的 Spring Web 应用中,该 Servlet 是在 web.xml 文件中定义的。
本文将会带你了解如何在 Spring Boot 项目中配置 DispatcherServlet,以及如何配置 web.xml 中的 Filter、Servlet 和 Listener。
2、Maven 依赖 首先,在 pom.xml 文件中添加 spring-boot-starter-web Maven 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 3、DispatcherServlet DispatcherServlet 接收所有 HTTP 请求,并将其调度给 Controller 类。
在 Servlet 3.x 规范发布之前,DispatcherServlet 会在 Spring MVC 应用的 web.xml 文件中注册。自 Servlet 3.x 规范发布后,可以使用 ServletContainerInitializer 以编程方式注册 Servlet。
web.xml 文件中的 DispatcherServlet 配置示例:
Spring Initializr(start.spring.io)是由 Spring Boot 官方提供的一个开源的 Spring Boot 项目初始化器。它提供了一个简单易用的界面来创建和配置 Spring 项目的初始代码。通过这个网站,开发者可以选择所需的 Spring Boot 版本、语言、构建工具(如 Maven 或 Gradle)、依赖和其他项目设置。
由于 Spring Boot 飞速发展,紧跟官方更新的 Spring Initializr 中可选择的 Spring Boot 版本、Java 版本也在随之迭代升级。所以,通过 Spring Initializr 可能无法选择旧版本的 Spring Boot。
截止撰稿时,start.spring.io 中最低的 Spring Boot 版本为 3.1.6,而目前大多数人用的仍然是 Spring Boot 2。
本文将会带你了解如何通过 start.spring.io 创建旧版本的 Spring Boot 项目。
手动修改版本号 你可以直接从 start.spring.io 创建任意 Spring Boot 和 Java 版本的 Spring Boot 项目,然后手动修改 pom.xml 或者 build.gradle 中的版本配置即可:
以 Maven 项目为例,只需要修改 pom.xml 中的 2 个配置元素即可:
1、概览 Apache Kafka 是一个功能强大、分布式、容错的流处理系统。在之前的教程中,介绍了 如何在 Spring 中整合、使用 Kafka。
本文将在 上一节 的基础上带你了解如何编写可靠、独立的集成测试,而不依赖于外部运行的 Kafka 服务器。
2、依赖 在 pom.xml 中添加标准的 spring-kafka 依赖:
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.7.2</version> </dependency> 以及两个专门用于测试的依赖,spring-kafka-test 和 Testcontainers Kafka(注意,都是 Test Scope)。
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <version>2.6.3.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>kafka</artifactId> <version>1.19.3</version> <scope>test</scope> </dependency> 3、简单的 Kafka 生产者-消费者应用 这是一个标准的 Spring Boot 应用,Application 类如下:
@SpringBootApplication public class KafkaProducerConsumerApplication { public static void main(String[] args) { SpringApplication.run(KafkaProducerConsumerApplication.class, args); } } 3.1、生产者设置 接下来,创建 Producer bean,用它来向指定的 Kafka Topic 发送消息:
1、简介 Docker 是创建独立应用的事实标准。从 2.3.0 版开始,Spring Boot 包含了多项增强功能,可帮助我们创建高效的 Docker 镜像。例如:它允许将应用分解成不同的层。
换句话说,源代码位于自己的层中。因此,它可以独立重建,从而提高效率并缩短启动时间。本文将带你了解如何利用 Spring Boot 重用 Docker 层。
2、Docker 中的分层 jar Docker 容器由基础镜像和额外的层组成。一旦层构建完成,它们将保持缓存状态。因此,后续的生成速度会更快:
对底层层级的更改也会重新构建上层层级。因此,不经常更改的层级应保持在底部,而经常更改的层级应放在顶部。
同样,Spring Boot 允许将工件(构建产物)内容映射到层中。默认的层映射如下:
你可以看到,应用有自己的层。修改源代码时,只会重新构建独立的层。loader 和依赖保持缓存,从而减少了 Docker 镜像的创建和启动时间。接下来看看如何使用 Spring Boot 实现这一点!
3、Spring Boot 创建高效的 Docker 镜像 在传统的构建 Docker 镜像的方式中,Spring Boot使用的是 “fat jar” 方法。一个工件就包含了所有依赖项和应用源代码。因此,源代码的任何变化都会迫使我们重建整个层。
3.1、Spring Boot 分层配置 Spring Boot 2.3.0 版引入了两个新功能来改进 Docker 镜像的生成:
Buildpack 支持提供了应用的 Java 运行时环境,因此现在可以跳过 Dockerfile,并自动构建 Docker 镜像。 分层 JAR 可以帮助我们最大限度地利用 Docker 层的生成 在本文中,我们将对分层 JAR 方法进行扩展。
首先,在 Maven 中设置分层 JAR 。在打包工件时,生成层。
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)通过将类元数据缓存在 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.
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.
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 文件:
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 应用: