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

Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南

一、Spring Boot 概述:重新定义 Java 开发

1.1 什么是 Spring Boot?

Spring Boot 是基于 Spring 框架的快速开发框架,旨在简化 Spring 应用的初始搭建及开发过程。它通过 「约定优于配置」(Convention Over Configuration) 的理念,自动配置大部分开发场景下的通用设置,让开发者聚焦业务逻辑而非基础设施配置。

1.2 核心优势

  • 快速启动:通过 Starter 一键集成依赖,无需手动编写大量 XML 或繁琐配置。
  • 内嵌容器:内置 Tomcat、Jetty 等 Servlet 容器,可直接运行 JAR 包,无需手动部署。
  • 生产级特性:内置 Actuator 监控、健康检查、安全管理等功能,开箱即用。
  • 微服务友好:与 Spring Cloud 无缝整合,支持服务注册、配置中心、链路追踪等微服务场景。

二、Spring Boot 核心概念与架构

2.1 自动配置(Auto-configuration)

Spring Boot 通过 @EnableAutoConfiguration 注解实现自动配置,核心原理如下:

  1. 类路径扫描:检测项目中引入的依赖(如 spring-boot-starter-web),触发对应的自动配置类(如 WebMvcAutoConfiguration)。
  2. 条件注解过滤:通过 @ConditionalOnClass(存在某个类时生效)、@ConditionalOnMissingBean(无自定义 Bean 时生效)等注解动态控制配置的加载。
  3. 属性绑定:通过 @ConfigurationProperties 将 application.properties/application.yml 中的配置注入到 Bean 中。

示例:自定义自动配置

@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DatabaseProperties.class)
public class DatabaseAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic DataSource dataSource(DatabaseProperties properties) {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl(properties.getUrl());dataSource.setUsername(properties.getUsername());dataSource.setPassword(properties.getPassword());return dataSource;}
}// 配置属性类
@ConfigurationProperties(prefix = "spring.datasource")
public class DatabaseProperties {private String url;private String username;private String password;// getters and setters
}

2.2 Starter 依赖机制

Starter 是 Spring Boot 封装依赖的核心模块,命名规范为 spring-boot-starter-*,作用是将相关依赖聚合为单一模块,简化依赖管理。

  • 核心 Starter 示例
    • spring-boot-starter-web:包含 Spring MVC、Tomcat、JSON 解析等 Web 开发必需依赖。
    • spring-boot-starter-data-jpa:整合 Hibernate、Spring Data JPA,简化数据库操作。
    • spring-boot-starter-security:集成 Spring Security,快速实现认证授权。
  • 使用方式:在 pom.xml 中引入 Starter,Spring Boot 自动处理依赖版本和传递性依赖。

三、快速入门:从环境搭建到第一个应用

3.1 开发环境准备

  • JDK:建议使用 Java 17+(Spring Boot 3.x 最低要求)。
  • IDE:IntelliJ IDEA(推荐)或 Eclipse,安装 Spring Boot 插件。
  • 构建工具:Maven 3.6+ 或 Gradle 7+。

3.2 创建第一个 Spring Boot 项目

方式一:通过 Spring Initializr 网页端
  1. 访问 start.spring.io。
  2. 选择 Group(如 com.example)、Artifact(如 demo)、Java 版本(17)、依赖(如 Web)。
  3. 下载生成的 ZIP 包,解压后导入 IDE。
方式二:IDE 内置模板

在 IntelliJ IDEA 中选择 File > New > Project > Spring Boot,按向导配置项目信息。

3.3 项目结构解析

demo/
├─ src/main/java/
│  └─ com/example/demo/
│     ├─ DemoApplication.java  # 启动类(含 @SpringBootApplication 注解)
│     ├─ controller/           # 控制器层(处理 HTTP 请求)
│     ├─ service/              # 业务逻辑层
│     └─ repository/           # 数据访问层(如 Spring Data JPA 接口)
├─ src/main/resources/
│  ├─ application.properties   # 主配置文件(也可用 application.yml)
│  ├─ static/                  # 静态资源(CSS、JS、图片等)
│  └─ templates/               # 模板文件(如 Thymeleaf 页面)
└─ pom.xml                    # Maven 依赖配置文件

3.4 编写第一个 RESTful API

控制器类(Controller)
@RestController
@RequestMapping("/api/hello")
public class HelloController {@GetMappingpublic String sayHello() {return "Hello, Spring Boot!";}@PostMappingpublic User createUser(@RequestBody User user) {return new User(user.getId(), "Created: " + user.getName());}
}// 数据实体类
class User {private Long id;private String name;// 构造方法、getters and setters
}
启动应用
  • 在 IDE 中直接运行 DemoApplication.java 的 main 方法。
  • 通过命令行运行:
    mvn spring-boot:run  # Maven 方式
    ./gradlew bootRun    # Gradle 方式
    
  • 访问 http://localhost:8080/api/hello,查看返回结果。

四、核心配置与常用功能

4.1 配置文件格式

Spring Boot 支持两种配置文件格式:

  1. properties 文件
    # 服务器端口
    server.port=8081
    # 数据库配置
    spring.datasource.url=jdbc:mysql://localhost:3306/demo
    spring.datasource.username=root
    spring.datasource.password=123456
    
  2. yml 文件(推荐,更简洁):
    server:port: 8081
    spring:datasource:url: jdbc:mysql://localhost:3306/demousername: rootpassword: 123456
    

4.2 多环境配置

通过 application-{profile}.properties/yml 实现不同环境(开发、测试、生产)的配置隔离:

  • 开发环境application-dev.yml
  • 生产环境application-prod.yml
  • 激活指定环境
    spring.profiles.active=dev  # 在 application.properties 中指定
    

4.3 热部署(DevTools)

添加依赖后,修改代码无需重启应用即可生效:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> <!-- 生产环境无需打包 -->
</dependency>

IDEA 配置:开启 Compiler > Build Project automatically 和 Registry > compiler.automake.allow.when.app.running

五、数据访问与持久化

5.1 Spring Data JPA 入门

Spring Data JPA 是 Spring 提供的简化数据库操作的框架,基于 JPA 规范,支持自动生成 SQL。

实体类(Entity)
@Entity
@Table(name = "users")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;private LocalDateTime createTime;// 构造方法、getters and setters
}
数据访问接口(Repository)
public interface UserRepository extends JpaRepository<User, Long> {// 自动生成查询方法:根据方法名解析 SQLList<User> findByNameContaining(String keyword);// 自定义查询@Query("SELECT u FROM User u WHERE u.email LIKE %:email%")List<User> searchByEmail(String email);
}
使用示例
@Service
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}public List<User> getAllUsers() {return userRepository.findAll();}public User createUser(User user) {user.setCreateTime(LocalDateTime.now());return userRepository.save(user);}
}

六、生产级特性:监控与部署

6.1 Actuator 监控端点

Actuator 提供应用运行时的监控和管理功能,通过添加依赖开启:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

常用端点

  • /actuator/health:应用健康状态(数据库、缓存等依赖检查)。
  • /actuator/metrics:JVM 内存、CPU 使用率、自定义指标。
  • /actuator/env:查看环境变量和配置属性。
  • /actuator/beans:查看 Spring 容器中的 Bean 列表。

配置示例(application.yml

management:endpoints:web:exposure:include: "health,metrics,env"  # 暴露指定端点endpoint:health:show-details: always  # 显示健康检查详情

6.2 打包与部署

打包为可执行 JAR
mvn clean package  # Maven 命令,生成 target/demo-0.0.1-SNAPSHOT.jar
运行 JAR 包
java -jar target/demo-0.0.1-SNAPSHOT.jar  # 直接运行
java -jar -Dspring.profiles.active=prod demo.jar  # 指定生产环境配置
Docker 容器化部署
FROM openjdk:17-alpine
VOLUME /tmp
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建并运行:

docker build -t spring-boot-demo .
docker run -d -p 8080:8080 spring-boot-demo

七、Spring Boot 最佳实践

7.1 分层架构规范

  • Controller 层:处理 HTTP 请求,参数校验,返回响应结果。
  • Service 层:封装业务逻辑,调用 Repository 完成数据操作,添加事务控制。
  • Repository 层:继承 Spring Data JPA 接口,实现数据持久化。
  • Model 层:实体类(@Entity)和 DTO(数据传输对象,用于接口参数和响应)。

7.2 统一异常处理

通过 @RestControllerAdvice 实现全局异常捕获,统一响应格式:

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(BindException.class) // 参数校验失败异常public ResponseEntity<ErrorResponse> handleBindException(BindException ex) {List<String> errors = ex.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList());return ResponseEntity.badRequest().body(new ErrorResponse(400, "参数校验失败", errors));}@ExceptionHandler(Exception.class) // 通用异常public ResponseEntity<ErrorResponse> handleGlobalException(Exception ex) {return ResponseEntity.internalServerError().body(new ErrorResponse(500, "服务器内部错误", Arrays.asList(ex.getMessage())));}
}// 错误响应实体
class ErrorResponse {private int status;private String message;private List<String> details;// 构造方法、getters and setters
}

八、总结与学习资源

8.1 核心价值

Spring Boot 通过自动化配置和便捷的开发体验,大幅提升了 Java 应用的开发效率,尤其适合微服务架构和企业级项目。掌握其核心原理(自动配置、Starter、Actuator)和最佳实践(分层架构、异常处理、容器化部署)是进阶的关键。

8.2 推荐学习资源

  • 官方文档:Spring Boot Documentation
  • 书籍:《Spring Boot 实战》《Spring Boot 核心技术与开发实战》
  • 实战项目:基于 Spring Boot + Vue 的前后端分离项目(如博客系统、电商平台)。

通过以上内容,开发者可快速掌握 Spring Boot 基础知识,并基于此构建高效、可靠的企业级应用。后续可进一步学习 Spring Cloud 微服务架构、响应式编程(Spring WebFlux)等进阶主题,拓展技术深度。

相关文章:

Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南

一、Spring Boot 概述&#xff1a;重新定义 Java 开发 1.1 什么是 Spring Boot&#xff1f; Spring Boot 是基于 Spring 框架的快速开发框架&#xff0c;旨在简化 Spring 应用的初始搭建及开发过程。它通过 「约定优于配置」&#xff08;Convention Over Configuration&#…...

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论&#xff08;十一&#xff09;SQL 集合查询 超详细讲解&#xff08;附带例题表格对比带你一步步掌握&#xff09; 前言一、什么是集合查询&#xff1f;二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…...

[mcu]系统频率

系统主频的选择直接影响性能、功耗和成本&#xff0c;不同厂商的芯片会根据应用场景设计不同的运行频率。 低频段80MHZ~160MHz 典型频率&#xff1a; 80MHz、120MHz、160MHz 特点&#xff1a; 低功耗&#xff0c;适合电池供电设备 处理能力有限&#xff0c;通常仅支持 单天线…...

clickhouse如何查看操作记录,从日志来查看写入是否成功

背景 插入表数据后&#xff0c;因为原本表中就有数据&#xff0c;一时间没想到怎么查看插入是否成功&#xff0c;因为对数据源没有很多的了解&#xff0c;这时候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具体方法 根据操作类型查找&#xff0c;比如inse…...

5G-A:开启通信与行业变革的新时代

最近&#xff0c;不少细心的用户发现手机信号标识悄然发生了变化&#xff0c;从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变&#xff0c;却蕴含着通信技术领域的重大升级&#xff0c;预示着一个全新的通信时代正在向我们走来。今天&#xff0c;就让我们深入了解一下 5G-A&a…...

鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp

在UniApp中集成Three.js&#xff1a;打造跨平台3D可视化应用 引言 在最近的一个项目中&#xff0c;我们需要在UniApp应用中展示3D模型&#xff0c;并实现实时交互功能。经过技术选型和实践&#xff0c;我们选择了Three.js作为3D渲染引擎。本文将分享我们在UniApp中集成Three.…...

Vue 3 组件化设计实践:构建可扩展、高内聚的前端体系

Vue 3 自发布以来&#xff0c;其引入的 Composition API 与改进的组件模型&#xff0c;为前端架构提供了更强的可组合性、复用性与模块化能力。本文将系统性探讨 Vue 3 如何通过组件化设计&#xff0c;实现复杂应用的解耦、扩展与维护&#xff0c;并结合实际工程经验提供最佳实…...

腾讯云 Python3.12.8 通过yum安装 并设置为默认版本

在腾讯云服务器上&#xff0c;直接通过 yum 安装 Python 3.12.8 可能不可行&#xff0c;因为标准仓库通常不包含最新的 Python 版本。不过&#xff0c;我们可以通过添加第三方仓库或手动安装 RPM 包的方式实现。以下是完整解决方案&#xff1a; 方法 1: 通过第三方仓库安装&am…...

鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp

UniApp页面切换动效实战&#xff1a;打造流畅精致的转场体验 引言 在移动应用开发中&#xff0c;页面切换动效不仅能提升用户体验&#xff0c;还能传达应用的品质感。随着HarmonyOS的普及&#xff0c;用户对应用的动效体验要求越来越高。本文将深入探讨如何在UniApp中实现流畅…...

React 泛型组件:用TS来打造灵活的组件。

文章目录 前言一、什么是泛型组件&#xff1f;二、为什么需要泛型组件&#xff1f;三、如何在 React 中定义泛型组件&#xff1f;基础泛型组件示例使用泛型组件 四、泛型组件的高级用法带默认类型的泛型组件多个泛型参数 五、泛型组件的实际应用场景数据展示组件表单组件状态管…...

TDengine 集群运行监控

简介 为了确保集群稳定运行&#xff0c;TDengine 集成了多种监控指标收集机制&#xff0c;并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据&#xff0c;并将其写入一个独立的 TDengine 实例中&#xff0c;该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的…...

图像任务中的并发处理:线程池、Ray、Celery 和 asyncio 的比较

在图像缺陷检测任务中&#xff0c;处理大量图像和点云数据时&#xff0c;高效的并发处理是关键。本文将介绍五种流行的并发处理方法&#xff1a;线程池&#xff08;concurrent.futures.ThreadPoolExecutor&#xff09;、Ray、Celery、asyncio以及搜狗Workflow&#xff0c;并从原…...

DeepSeek 赋能智能物流:解锁仓储机器人调度的无限可能

目录 一、智能物流仓储机器人调度现状1.1 传统调度面临的挑战1.2 现有智能调度的进展与局限 二、DeepSeek 技术探秘2.1 DeepSeek 核心技术原理2.2 DeepSeek 的独特优势 三、DeepSeek 在智能物流仓储机器人调度中的创新应用3.1 智能任务分配与调度3.2 路径规划与避障优化3.3 实时…...

C#上传图片后压缩

上传的图片尺寸不一&#xff0c;手机拍照的有2000*2000像素的&#xff0c;对实际使用来说 文件尺寸太大&#xff0c;文件也有近4M 下面是直接压缩的方法 1、安装包 Magick.NET-Q16-AnyCPU 2、上代码 /// <summary> /// 缩放图片 /// </summary> /// <param …...

uniapp路由跳转toolbar页面

需要阅读uview-ui的API文档 注意需要使用type参数设置后才起作用 另外route跳转的页面会覆盖toolbar工具栏 toConternt(aid) {console.log(aid:, aid)this.$u.route({// url: "pages/yzpg/detail",url: "pages/yzappl/index",// url: "pages/ind…...

【linux】知识梳理

操作系统的分类 1. 桌⾯操作系统: Windows/macOS/Linux 2. 移动端操作系统: Android(安卓)/iOS(苹果) 3. 服务器操作系统: Linux/Windows Server 4. 嵌⼊式操作系统: Android(底层是 Linux) Liunx介绍 liunx系统:服务器端最常见的操作系统类型 发行版:Centos和Ubuntu 远程连接操…...

PostgreSQL 内置扩展列表

PostgreSQL 内置扩展列表 PostgreSQL 自带了许多内置扩展&#xff08;built-in extensions&#xff09;&#xff0c;这些扩展提供了额外的功能而不需要额外安装。以下是主要的内置扩展分类和说明&#xff1a; 标准内置扩展&#xff08;随核心安装&#xff09; 1. 管理类扩展…...

NodeMediaEdge快速上手

NodeMediaEdge快速上手 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后&#xff0c;可以同NodeMediaServer结合使用。使用图形化的…...

ChatOn:智能AI聊天助手,开启高效互动新时代

在当今快节奏的生活中&#xff0c;无论是工作、学习还是日常交流&#xff0c;我们常常需要快速获取信息、整理思路并高效完成任务。ChatOn 正是为满足这些需求而生&#xff0c;它基于先进的 ChatGPT 和 GPT-4o 技术&#xff0c;为用户提供市场上最优秀的中文 AI 聊天机器人。这…...

基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置

文章目录 3、图片知识图谱3.1 初始化图片知识图谱3.2 修改节点形状3.3 修改节点背景颜色3.4 完整代码下载3、图片知识图谱 3.1 初始化图片知识图谱 1️⃣效果预览: 2️⃣关键代码: 给节点添加image属性: const nodes = ref([{id: 1,...

监督学习 vs 无监督学习:AI两大学习范式深度解析

监督学习 vs 无监督学习&#xff1a;AI两大学习范式深度解析 引言&#xff1a;机器如何"学习"&#xff1f; 想象教孩子识别动物&#xff1a;一种方法是展示图片并告诉名称&#xff08;监督学习&#xff09;&#xff0c;另一种是让孩子自己观察动物特征并分类&#…...

C# Costura.Fody 排除多个指定dll

按照网上的说在 FodyWeavers.xml 里修改 然后需要注意的是 指定多个排除项 不是加 | 是换行 一个换行 就排除一项 我测试的 <?xml version"1.0" encoding"utf-8"?> <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…...

NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)

&#x1f4e6; 8.1 请描述你做过的 Web3 项目&#xff0c;具体技术栈和你负责的模块&#xff1f; 我主导开发过一个基于 NFT 的数字纪念平台&#xff0c;用户可以上传照片并生成独特的纪念 NFT&#xff0c;结合 IPFS 和 ERC-721 实现永存上链。 &#x1f527; 技术栈&#xf…...

小白的进阶之路系列之五----人工智能从初步到精通pytorch张量

张量 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。 张量类似于NumPy的ndarray,除了张量可以在gpu或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而消除了复制数据…...

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…...

android-studio-2024.3.2.14如何用WIFI连接到手机(给数据线说 拜拜!)

原文&#xff1a;Android不用数据线就能调试真机的方法—给数据线说 拜拜&#xff01;&#xff08;adb远程调试&#xff09; android-studio-2024.3.2.14是最新的版本&#xff0c;如何连接到手机&#xff0c;可用WIFI&#xff0c;可不用数据线&#xff0c;拜拜 第一步&#xf…...

[特殊字符] xbatis 一款好用 ORM 框架 1.8.8-M2 发布,节省 1/3 代码和时间的框架!!!

1.8.8-M2 更新内容: 1:优化默认值,对同一类减少重复调用2:优化分页,支持 limit (-1) 进行忽略分页3:优化 UpdateChain.set;支持.set (SysUser::getVersion, c -> c.plus (1))4:优化 @Fetch, 已增强,无法配置 groupby、forceUseIn(已去除)5:增强 @Fetch,支持中间…...

js 动画库、2048核心逻辑、面试题add[1][2][3]+4

1、js 动画库 web animation api &#xff08;1&#xff09;初始化代码 hmtl、css 部分 初始化全局背景黑色初始化黄色小球 js 部分 监听全局点击事件创建并添加元素 class"pointer" 的 div 标签 设置 left、top 位置监听动画结束事件&#xff0c;移除该元素 定位小…...

华为OD机试真题——书籍叠放(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

PyTorch-Transforms的使用(二)

对图像进行处理 安装open cv ctrlP 看用法 ToTensor的使用 常见的Transforms 归一化的图片 两个长度为三的数组&#xff0c;分别表示三个通道的平均值和标准差 Resize&#xff08;&#xff09; Compose&#xff08;&#xff09; 合并执行功能&#xff0c;输入进去一个列表&a…...