当前位置: 首页 > news >正文

【Spring Boot 】详解

Spring Boot 详解

一、Spring Boot 概述

(一)产生背景

随着 Java 应用的日益复杂,传统 Spring 框架在项目搭建与配置方面愈发繁琐,大量的 XML 配置、依赖管理等工作耗费开发者诸多精力。为解决这些痛点,Spring Boot 应运而生,旨在简化 Spring应用的初始搭建以及开发过程,让开发者能更聚焦于业务逻辑实现。

(二)特点与核心优势

1. 自动配置

Spring Boot 的自动配置是其一大亮点。

其核心原理基于条件注解(如 @Conditional 及其衍生注解)以及大量的配置类。以下是部分关键源码展示:

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourceAutoConfiguration.DataSourceInitializerConfiguration.class,DataSourceAutoConfiguration.DataSourceJmxConfiguration.class })
public class DataSourceAutoConfiguration {// 内部有诸多方法和逻辑用于根据条件判断是否要创建数据源相关的配置以及如何配置@Configuration@Conditional(EmbeddedDatabaseCondition.class)@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })protected static class EmbeddedDatabaseConfiguration {// 比如这里根据是否存在嵌入式数据库相关类等条件,来决定是否创建嵌入式数据库的配置@Bean@ConfigurationProperties(prefix = "spring.datasource.embedded")public EmbeddedDatabaseFactoryBean embeddedDatabaseFactory(EmbeddedDatabaseType databaseType) {EmbeddedDatabaseFactoryBean factory = new EmbeddedDatabaseFactoryBean();factory.setDatabaseType(databaseType);return factory;}}
}
  • 从源码角度看,像 DataSourceAutoConfiguration 这样的自动配置类,会根据类路径下是否存在特定的类(通过 @ConditionalOnClass 判断)等诸多条件,来决定是否要进行数据源相关配置的创建以及初始化。Spring Boot 启动时会扫描所有的自动配置类,满足条件的配置就会生效,从而减少了开发者手动配置数据源等繁琐操作。
  • 在性能方面,自动配置在启动阶段虽需遍历大量的配置类并判断条件,但得益于条件缓存等机制,后续重复启动的性能损耗不大。应用场景上,适用于各种规模的 Spring 项目,尤其新项目快速搭建基础环境时,无需开发者深入了解每个组件的详细配置细节。
2. 起步依赖

Spring Boot 的起步依赖通过 spring-boot-starter 系列的依赖管理机制实现。

它将相关功能模块所需的依赖进行了整合打包,例如 spring-boot-starter-web 会包含 Spring Web 开发所需的 Spring、Servlet、Tomcat 等相关依赖。

在 spring-boot-dependencies 这个父项目的 pom.xml 文件中有核心的依赖管理配置,如下(简化示意):

<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- 众多其他起步依赖配置 --></dependencies>
</dependencyManagement>

这样开发者只需引入对应的起步依赖,就能确保项目具备相应功能模块的完整依赖,避免了版本冲突等问题。性能上,减少了开发者查找和管理众多单个依赖版本的时间成本。应用场景广泛,无论是小型的 API 服务开发还是大型企业级应用构建,都能快速引入所需功能依赖。

(三)项目搭建流程

以使用 IDEA 为例,新建项目时选择 Spring Initializr 模板,填写项目基本信息(如项目名、包名等),然后在依赖选择界面勾选所需的起步依赖(如 Web 开发相关依赖),点击完成即可创建一个简单的 Spring Boot 项目,项目结构中会自动生成启动类等基础代码,方便后续开发。

二、Spring Boot 配置文件

(一)格式与作用

  • application.properties:是传统的键值对格式配置文件
    例如:properties:
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/test

配置文件用于定制项目的各类参数,涵盖服务器端口、数据库连接、日志级别等多方面,是调整项目运行行为的关键所在。

(二)常用配置项

服务器相关配置:
  • server.port:用于指定项目启动后监听的端口号,源码中在 ServerProperties 类里有对应的属性及 setter 方法(部分简化源码):
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {private int port = 8080;public void setPort(int port) {this.port = port;}// 还有诸多其他服务器相关属性及配置逻辑
}

当修改配置文件中的 server.port 值时,Spring Boot 在启动过程中会通过属性绑定机制将该值设置到 ServerProperties 类对应的 port 属性上,进而影响服务器启动监听的端口。性能方面,端口配置加载简单快速,几乎不产生额外性能开销。应用场景为不同环境(开发、测试、生产)下需要切换端口时使用。

  • 数据库连接配置:像 spring.datasource.url、spring.datasource.username、spring.datasource.password 等配置项用于连接数据库。在 DataSourceAutoConfiguration 等相关配置类中,会读取这些配置值来构建数据源对象,其性能影响取决于数据库驱动等底层实现,应用场景自然是所有需要与数据库交互的项目都需配置。

三、Spring Boot 中集成 Web 框架及内置服务器相关

(一)集成 Spring Web

Spring Boot 集成 Spring Web 时,引入 spring-boot-starter-web 起步依赖后,内部通过自动配置机制完成了诸多设置。在 WebMvcAutoConfiguration 这个关键的自动配置类中(部分源码展示):

@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class })
public class WebMvcAutoConfiguration {// 配置了默认的 DispatcherServlet,它是 Spring Web 中处理请求分发等核心逻辑的组件@Beanpublic DispatcherServlet dispatcherServlet() {return new DispatcherServlet();}// 还有配置视图解析器、静态资源处理等诸多与 Web 开发紧密相关的逻辑和组件配置@Configuration@Import(EnableWebMvcConfiguration.class)public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {// 比如添加拦截器的配置逻辑等@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 具体的添加逻辑示例,可自定义拦截器添加在此处}}
}

从源码可知,它会根据条件判断项目是否是基于 Servlet 的 Web 应用等情况,自动创建 DispatcherServlet 等核心组件,并配置相关的拦截器、视图解析器等,方便开发者快速开展 Web 开发。性能上,由于自动配置了常用的高效处理逻辑,在处理常规 Web 请求时性能表现良好,适合各类 Web 应用开发场景,从小型的网站后端到大型的企业级 Web 服务都适用。

(二)集成 Spring WebFlux

对于 Spring WebFlux,在引入 spring-boot-starter-webflux 起步依赖后,同样有对应的自动配置类发挥作用,基于响应式编程模型构建非阻塞式的 Web 应用。例如 WebFluxAutoConfiguration 类(部分源码示意):

@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
@ConditionalOnClass({ WebFluxConfigurer.class, ReactiveWebServerFactory.class })
@ConditionalOnMissingBean(WebFluxConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ ReactiveWebServerFactoryAutoConfiguration.class })
public class WebFluxAutoConfiguration {// 配置响应式的 Web 服务器工厂等核心组件,用于创建响应式的服务器实例@Beanpublic ReactiveWebServerFactory reactiveWebServerFactory() {// 根据具体条件,比如配置选择创建不同类型(如 Netty、Tomcat 等支持的响应式模式)的服务器工厂return new DefaultReactiveWebServerFactory();}// 配置路由等响应式 Web 相关逻辑,使得请求能正确路由到对应的处理器方法@Configuration@Import(EnableWebFluxConfiguration.class)public static class WebFluxAutoConfigurationAdapter extends WebFluxConfigurerAdapter {@Overridepublic void configureRoutes(RouterFunctionRegistration registration) {// 自定义路由配置逻辑示例,可将请求映射到具体的响应式处理器函数上}}
}

其性能优势在于应对高并发场景时,基于非阻塞的 I/O 模型,能更高效地利用系统资源,减少线程阻塞等待时间。应用场景多集中在需要处理大量并发请求且对响应及时性要求高的场景,比如实时数据推送、大规模 API 网关等项目。

(三)内置服务器的切换及配置方法

Spring Boot 内置了 Tomcat、Jetty、Undertow 等服务器。以切换服务器为例,在 pom.xml 文件中排除默认的服务器依赖(如排除 Tomcat 依赖),再引入想要使用的服务器依赖即可实现切换。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration</artifactId></exclusion><exclusion><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.4.46.v20220331</version>
</dependency>

在源码层面,ServletWebServerFactoryAutoConfiguration 等配置类会根据项目依赖情况创建对应的服务器实例(如 TomcatServletWebServerFactory 创建 Tomcat 服务器实例),切换依赖就改变了实例化的服务器类型。不同服务器在性能上各有优劣,Tomcat 通用性强、应用广泛;Jetty 启动快,在轻量级应用中有优势;Undertow 在高并发下性能出色。应用场景可根据项目对性能、资源占用等方面的需求来选择切换使用。

Spring Boot 通过其强大的自动配置、方便的配置文件以及灵活的 Web 框架集成与内置服务器管理等功能,极大地简化了 Spring
应用开发过程,在众多 Java 项目开发场景中都有着广泛且重要的应用。

相关文章:

【Spring Boot 】详解

Spring Boot 详解 一、Spring Boot 概述 &#xff08;一&#xff09;产生背景 随着 Java 应用的日益复杂&#xff0c;传统 Spring 框架在项目搭建与配置方面愈发繁琐&#xff0c;大量的 XML 配置、依赖管理等工作耗费开发者诸多精力。为解决这些痛点&#xff0c;Spring Boot …...

Redisson 框架详解

目录 一.为什么要使用分布式锁&#xff1f; 二.Redisson 的基本使用&#xff1a; 1.添加 Redisson 依赖&#xff1a; 2.在 application.yml 配置 Redis&#xff1a; 3. 创建 Redisson 客户端&#xff1a; &#xff08;1&#xff09;单节点模式&#xff1a; &#xff08;…...

正确导入MapStruct并避免与Lombok编译冲突的深入分析

正确导入MapStruct并避免与Lombok编译冲突的深入分析 一、MapStruct与Lombok概述 1.1 MapStruct简介 MapStruct是一个代码生成器,它基于约定优于配置的原则,通过注解处理器在编译时自动生成源代码,实现对象之间的属性映射。MapStruct的优势在于减少样板代码,提高开发效率…...

K8S 黑魔法之如何从 Pod 拿到节点的命令行

搞 K8S 运维的时候&#xff0c;偶尔会遇到一个难题&#xff0c;定位到问题出在某个节点上&#xff0c;而由于权限审批&#xff0c;错误配置等等各种原因&#xff0c;没有办法拿到节点的 SSH 权限&#xff0c;无法进入节点命令行进一步排障。 这个时候&#xff0c;就可以用这个…...

【bluedroid】A2dp Source播放流程源码分析(4)

接上集分析:【bluedroid】A2dp Source播放流程源码分析(3)-CSDN博客 蓝牙和AUDIO之间的接口 蓝牙和audio之间的通信是通过socket,管理socket中的文件是UIPC,UIPC管理两条socket。 A2DP_CTRL_PATH /data/misc/bluedroid/.a2dp_ctrl A2DP_DATA_PATH /data/misc/bluedroid…...

计算机网络 (9)数据链路层

前言 计算机网络中的数据链路层&#xff08;Data Link Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;参考模型中的第二层&#xff0c;位于物理层和网络层之间。它在物理层提供的服务基础上&#xff0c;负责在相邻节点之间建立、维护和终止链路&#xff0c;确保数…...

kubernetes学习-集群搭建部署(一)

一、开三台虚拟机进行试验&#xff08;centos7) 1、初始操作 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld# 关闭selinux sudo sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时# 关闭swap sudo swapoff -a # 临时 s…...

docker commit生成的镜像瘦身

1、清除宿主系统的docker资源 docker system prune -a --volumes 2、清理容器内系统的临时文件和缓存 # 删除包管理器缓存 apt-get clean rm -rf /var/lib/apt/lists/* # 删除日志文件 rm -rf /var/log/* # 删除临时文件 rm -rf /tmp/* 3、安装docker squash工具&#xff0…...

基于Spring Boot的宠物领养系统的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领…...

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品&#xff0c;只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…...

基于FISCO BCOS的电子签署系统

概述 本项目致力于构建一个安全、高效且功能完备的电子签署系统&#xff0c;通过整合区块链技术与传统数据库管理&#xff0c;为用户提供了可靠的电子签署解决方案&#xff0c;有效应对传统电子签署系统的数据安全隐患&#xff0c;满足企业和个人在数字化办公环境下对电子文档…...

RocketMQ(二)RocketMQ实战

文章目录 一、RocketMQ实战1.1 批量消息发送1.2 消息发送队列自选择1.3 事务消息1.4 SpringCloud集成RocketMQ 二、最佳实践2.1 生产者2.1.1 发送消息注意事项2.1.2 消息发送失败处理方式 2.2 消费者2.2.1 消费过程幂等2.2.2 消费打印日志 2.3 Broker 三、相关问题3.1 为什么要…...

Java重要面试名词整理(十三):RocketMQ

文章目录 简述环境搭建分布式集群配置升级高可用集群 RocketMQ的消息模型基本流程消息确认机制广播消息顺序消息机制延迟消息批量消息过滤消息事务消息ACL权限控制机制 调优消费者端进行幂等控制 核心客户端负载均衡Consumer负载均衡 消息持久化设计Dleger集群的文件同步机制 简…...

机器学习之线性回归算法预测数据

机器学习之线性回归算法预测数据 目录 机器学习之线性回归算法预测数据线性回归算法概念理解算法导入线性回归模型参数理解误差项分析 LinearRegression理解参数理解返回值方法基本格式 预测一元线性回归数据问题及理解可视化数据理解数据预测 预测二元线性回归数据问题及理解数…...

Python | 如何在Matplotlib中仅绘制热图的上/下三角形

热图是一种强大的可视化工具&#xff0c;用于以矩阵格式表示数据&#xff0c;其中各个值由颜色表示。它们对于可视化相关矩阵特别有用&#xff0c;其中矩阵的对称性质使得显示上下三角形变得多余。本文将指导您使用Matplotlib&#xff08;Python中流行的绘图库&#xff09;仅绘…...

Leetcode经典题20--长度最小的子数组

题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 输入输出示例 输入&…...

【计算机视觉】超简单!维纳滤波的经典案例

Hey小伙伴们&#xff01;今天来给大家分享一个 计算机视觉 中非常经典且实用的技术——维纳滤波&#xff08;Wiener Filter&#xff09;。维纳滤波是一种基于最小均方误差准则的滤波方法&#xff0c;广泛应用于图像去噪、模糊恢复等领域。它不仅可以有效去除图像中的噪声&#…...

【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存!

添加图片注释,不超过 140 字(可选) 【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存! 大家好,我是Jimmy。反推提示词的节点有很多,像Florence2 、Joycaption2、喵手等。都是非常优秀的。但是呢,就是占用设备资源,加…...

AE Dressler CESAR 1312 Generator Model User Manual

AE Dressler CESAR 1312 Generator Model User Manual...

【513. 找树左下角的值 中等】

题目&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 提示: 二叉树的节点个数的范围是 …...

收藏!小白程序员必备:从零入门大模型,抢占职场新风口(含学习资源包)

收藏&#xff01;小白程序员必备&#xff1a;从零入门大模型&#xff0c;抢占职场新风口&#xff08;含学习资源包&#xff09; CB Insights报告显示&#xff0c;AI智能体市场正爆发式增长&#xff0c;2024年融资达38亿美元。市场分为基础设施、通用应用和垂直应用三大板块&…...

金融数据清洗总出错?(Pandas+OpenBB+YFinance联合清洗框架首次公开)

第一章&#xff1a;金融数据清洗总出错&#xff1f;&#xff08;PandasOpenBBYFinance联合清洗框架首次公开&#xff09; 金融数据清洗常因缺失值、时区错位、字段命名不一致、多源数据时间对齐失败等问题导致回测失真或模型训练崩溃。传统单库处理方式难以兼顾实时性、标准化与…...

PCB设计中孔间距的DFM隐患,你避开了吗?

1. PCB孔间距设计&#xff1a;你可能忽略的定时炸弹 刚入行那会儿&#xff0c;我总觉得PCB设计就是把线路连通就行&#xff0c;直到亲眼看到产线上因为孔距问题报废的第三批板子——密密麻麻的破孔像蜂窝煤&#xff0c;有的孔边缘铜箔直接翘起来短路。老师傅指着板子说&#xf…...

多模态数据挖掘前沿:生物医学与情感分析领域论文深度解析

多模态数据挖掘前沿&#xff1a;生物医学与情感分析领域论文深度解析 在人工智能与大数据技术飞速发展的当下&#xff0c;多模态数据因能更全面、立体地刻画研究对象&#xff0c;已成为科研领域的核心研究方向。本文将深度解析两篇聚焦多模态数据挖掘的重磅论文——《多模态生物…...

(宏)Word题注自动化:从“图一-1”到“图1-1”的VBA实现与高效复用

1. 为什么需要题注自动化&#xff1f; 写论文或者技术文档的朋友肯定遇到过这样的烦恼&#xff1a;每次插入图片后&#xff0c;都要手动输入"图1-1"、"图1-2"这样的题注。更麻烦的是&#xff0c;如果你的章节标题用的是中文数字&#xff08;比如"第一…...

从LLaVA到Stable Diffusion:多模态融合选拼接还是交叉注意力?一张图帮你做技术选型

多模态融合技术选型指南&#xff1a;拼接与交叉注意力的深度对比与实践策略 在构建现代多模态AI系统时&#xff0c;工程师们常常面临一个关键决策点&#xff1a;如何有效地融合来自不同模态的信息&#xff1f;想象一下&#xff0c;你正在开发一个智能医疗影像分析系统&#xff…...

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

【写在前面&#xff1a;为什么要写这个专栏&#xff1f;】在数字图像处理领域&#xff0c;ISP&#xff08;图像信号处理器&#xff09;的算法原理并不罕见&#xff0c;但真正能够支持 4K60fps 实时处理、并经过商用验证的 Verilog 硬核实现思路 却往往秘和封装在黑盒之中。我手…...

岗亭厂家直销:揭秘源头工厂如何帮你省下30%采购成本

在2026年1月的今天&#xff0c;户外岗亭作为城市管理、社区安防及商业服务的关键节点&#xff0c;其市场需求持续增长。然而&#xff0c;行业在快速发展的同时&#xff0c;也暴露出一些亟待解决的技术与成本挑战。从技术层面看&#xff0c;传统岗亭产品普遍面临结构稳定性不足、…...

2026 工程指南:为什么 AWS Bedrock + Claude 4.6 正在成为多 Agent 协作的底层首选?

进入 2026 年第一季度&#xff0c;大模型领域的竞争已经从“单纯的参数规模”转向了“端到端的工程效率”。随着 GPT-5.4 陷入推理成本高企的泥潭&#xff0c;Anthropic 联手亚马逊发布的 Claude 4.6 托管方案&#xff0c;正在通过 Amazon Bedrock 平台迅速收割企业级市场。作为…...

告别云端推理:手把手教你用Vivado HLS在AX7350开发板上部署YOLOv3(附完整工程)

从零部署YOLOv3到AX7350开发板&#xff1a;FPGA加速实战全流程解析 在边缘计算领域&#xff0c;FPGA因其低延迟、高能效和可重构特性&#xff0c;成为深度学习模型部署的热门选择。本文将带您完成YOLOv3目标检测模型在AX7350开发板上的完整部署流程&#xff0c;从环境准备到最终…...