
Spring Boot v3.4.5 发布
🐞 Bug 修复 {#-bug-修复} -------------------- * 由于目录权限问题,使用原生镜像容器映像在 *podman* 上构建 Spring Boot 失败 [#45256](https://github.com/spring-projects/spring-boot/issues/45256) * `Neo4jReactiveDataAutoCo...
🐞 Bug 修复 {#-bug-修复} -------------------- * 由于目录权限问题,使用原生镜像容器映像在 *podman* 上构建 Spring Boot 失败 [#45256](https://github.com/spring-projects/spring-boot/issues/45256) * `Neo4jReactiveDataAutoCo...
1、概览 {#1概览} ----------- 默认情况下,Spring Boot 提供嵌入式 Tomcat 服务器,但在某些情况下,我们可能希望根据应用的需求来禁用/启用它。 对于不需要 Web 服务的 Spring Boot 应用,禁用 Tomcat 可以节省资源。 2、理解 Spring Boot 中的嵌入式 Tomcat {#2理解-spring-boot-中的嵌...
1、简介 {#1简介} ----------- `WebClient` 是 Spring WebFlux 中的一个 HTTP 客户端工具类,可以实现同步和异步 HTTP 请求。 本文将带你了解在 Spring `WebClient` 中设置 Header 的几种方式。 2、WebClient 如何处理 Header? {#2webclient-如何处理-header} -...
*[Spring AI 1.0.0-SNAPSHOT](https://github.com/spring-projects/spring-ai)* 在构件 ID、依赖管理和自动配置方面引入了几项重要变更。 本文将带你了解这些变更并提供项目更新指南。 最显著的变更是 [Spring AI Starter](https://github.com/spring-projects...
一、前言 {#一、前言} ------------ 要搭建传统 Spring MVC 项目,我们除了需要配置相应的配置文件,还需要在文件中声明包扫描路径,注解驱动,处理器映射器、适配器和视图解析器等相关配置,搭建步骤非常繁琐。 而 **Spring Boot** 则是通过 JavaConfig 的方式将以前繁琐的配置封装起来,我们只需要引入依赖即可完成相应组件的整合。 二...
一、前言 {#一、前言} ------------ 在N年前整理过 **Spring Boot** 的入门教程,当时还是 1.x 的内容。如今 **Spring Boot** 已经升级到 3.x 版本,不过版本之间的使用差距不大,此次发布文章仅当作常规知识以及新版本功能的补充。 如果你已经掌握 **Spring** 和 **SpringMVC** 知识,但还不熟 **Spr...
一、前言 {#一、前言} ------------ 要搭建传统 Spring MVC 项目,我们除了需要配置相应的配置文件,还需要在文件中声明包扫描路径,注解驱动,处理器映射器、适配器和视图解析器等相关配置,搭建步骤非常繁琐。 而 **Spring Boot** 则是通过 JavaConfig 的方式将以前繁琐的配置封装起来,我们只需要引入依赖即可完成相应组件的整合。 二...
一、前言 {#一、前言} ------------ 在N年前整理过 **Spring Boot** 的入门教程,当时还是 1.x 的内容。如今 **Spring Boot** 已经升级到 3.x 版本,不过版本之间的使用差距不大,此次发布文章仅当作常规知识以及新版本功能的补充。 如果你已经掌握 **Spring** 和 **SpringMVC** 知识,但还不熟 **Spr...
一、前言 {#一、前言} ------------ 本篇是对 **CountDownLoatch** 工具类的实际场景运用的简单补充,通过 **CountDownLoatch** 实现多线程下载器核心功能。 二、实现原理 {#二、实现原理} ---------------- 使用多线程对目标资源进行分块下载(设置 Range 请求头)提升下载效率,当所有分块下载完成后,再...
一、前言 {#一、前言} ------------ 本篇的介绍对象是 **CountDownLatch** ,它同样是基于 **AQS** 之上扩展的一款多线程场景下的工具类,它可以使一个或多个线程等待其他线程各自执行完毕后再执行。 对于 **CountDownLatch** 理解,我们可以将单次拆开为 **CountDown** 和 **Latch** 。**CountD...