一、关于
1.1 简介
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
学会 Spring Boot,可以简化使用 Spring 基础组件的难度,还是学习 Spring Cloud 微服务框架的基础,因为 Spring Cloud 的基础就是 Spring Boot。
Vaadin 最近发布了一份有关企业中 Java 现状的研究报告:
https://pages.vaadin.com/java-survey-2023
其中,Spring Boot 已经超越 Spring 成为最受欢迎的 Java 后端框架:
虽然 Spring Boot 是基于 Spring 的,但这个图表想表达的意思是,现在越来越多的开发者第一选择是基于开箱即用的 Spring Boot 来使用 Spring,而不是直接使用原始的 Spring。
既然 Spring Boot 代表了企业的真实需求,那么,它就会表现在 Java 工程师、架构师的求职面试技能清单上,Spring Boot 几乎是必备技能。
所以,要成为合格的 Java 程序员,要学习 Spring 全家桶,Spring Boot 则是必经之路。
1.2 发展及背景
1.2.1 发展
Spring Boot 是一个基于 Spring 框架的开源框架,旨在简化 Spring 应用的开发和部署。它由 Pivotal(现为 VMware) 开发,并在 Spring 生态系统中扮演了至关重要的角色。Spring Boot 的出现标志着 Spring 框架的一次重大变革,使得 Java 开发者能够更加便捷、快速地构建生产级的应用。以下是 Spring Boot 的发展历程:
1. Spring Framework 的起源与背景
- 2002年:Spring Framework 由 Rod Johnson 发布,最初是为了简化企业级 Java 应用的开发,特别是简化了 EJB(Enterprise JavaBeans)的复杂性。Spring 提供了控制反转(IoC)容器和面向切面编程(AOP)功能,极大地提高了 Java 企业应用的开发效率。
- 随着时间的推移,Spring 不仅扩展了 IoC 和 AOP 功能,还增加了对 Web 开发、数据访问、集成等方面的支持,逐渐演变成了一个庞大的企业应用开发框架。
2. Spring Boot 的诞生(2013年)
- 2013年:Spring Boot 由 Pivotal 的 Phil Webb 和 Dave Syer 提出并开发。Spring Boot 的主要目的是解决开发者在使用 Spring 时所面临的繁琐配置和启动复杂性问题。开发者通常需要配置大量的 XML 文件,Spring Boot 通过 约定优于配置(convention over configuration)的方式,简化了配置,推动了 Java 企业级应用的快速构建。
核心特性:
- 自动配置:Spring Boot 会根据项目的依赖自动配置应用。
- 内嵌服务器:Spring Boot 集成了内嵌的 Web 服务器(如 Tomcat、Jetty 或 Undertow),不再需要外部部署服务器。
- 可执行 JAR 包:Spring Boot 应用可以打包为独立的可执行 JAR 文件,简化了部署和运行过程。
- 简化的配置:通过使用注解和默认配置,Spring Boot 减少了对 XML 或大量手动配置的依赖。
Phil Webb
Dave Syer
3. Spring Boot 的首次发布与发展(2013-2014年)
- 2013年4月:Spring Boot 1.0.0-M1(第一个里程碑版本)发布,正式推出了 Spring Boot 的核心功能,如自动配置、内嵌服务器和简化的构建。
- 2013年10月:Spring Boot 1.0.0.RC1(候选发布版)发布。
- 2014年4月:Spring Boot 1.0.0 正式版发布,标志着 Spring Boot 作为独立框架的正式成熟,快速获得了开发者社区的广泛关注。
4. Spring Boot 与微服务的结合(2014-2016年)
- 随着 微服务架构的兴起,Spring Boot 成为构建微服务应用的理想选择。Spring Boot 使得开发者能够快速构建独立的、可部署的微服务应用,而不需要处理复杂的配置或外部容器。
- Spring Cloud,一个用于构建分布式系统的框架,开始与 Spring Boot 紧密集成。Spring Boot 与 Spring Cloud 结合成为了构建微服务架构的最佳实践,特别是在 服务发现、负载均衡、断路器、配置管理等 方面。
- 2015年:Spring Cloud 发布,并与 Spring Boot 紧密结合,促进了微服务架构的流行。Spring Boot 和 Spring Cloud 组合成为 Java 开发者进行微服务开发的首选工具。
5. Spring Boot 的持续发展与成熟(2016-2020年)
- 2016年:Spring Boot 1.4 版本发布,引入了许多新特性和改进,如改进的开发者工具、改进的自动配置、对 Spring 5 的支持等。
- 2018年:Spring Boot 2.0 发布,标志着框架的全面更新。Spring Boot 2.0 基于 Spring Framework 5 和 Spring 5.0,支持 Java 8 和更高版本,并引入了新的响应式编程支持(基于 Project Reactor)。此外,Spring Boot 2.0 提供了对 Spring WebFlux 和 Kotlin 的原生支持。
- 2019年:Spring Boot 2.2 发布,进一步增强了性能和可靠性,支持更快的启动时间和更简化的配置。
- 2020年:Spring Boot 2.3 发布,增强了对 Docker 和 Kubernetes 等容器化平台的支持,使得开发者能够更容易地将 Spring Boot 应用容器化并进行云部署。
6. Spring Boot 的现代化与未来发展(2021年至今)
- 随着 云原生技术和 容器化的兴起,Spring Boot 继续优化其对容器(如 Docker、Kubernetes)的支持,进一步简化微服务和云原生应用的开发与部署。
- Spring Boot 2.4(2020年)和 2.5(2021年)版本继续增强对生产环境的支持,改进了性能、内存使用、支持最新版本的 Spring Framework 以及增强的测试功能。
Spring Boot 3.0(计划于2023年发布):将全面支持 Java 17 和 Jakarta EE 9,这是 Spring Boot 进入新的时代的重要一步。
Spring Boot 3.x 的发布预计将继续推动现代 Java 开发向云原生、微服务架构和响应式编程的深度融合,同时支持更多的自动化功能、容器化和高效部署等特性。
1.2.2 背景
SpringFramework解决了什么问题?
Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的EnterpriseJavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。
1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑
2.可以提供众多服务,事务管理,WS等。
3.AOP的很好支持,方便面向切面编程。
4.对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等 5.Spring DI机制降低了业务对象替换的复杂性。
6.Spring属于低侵入,代码污染极低。
7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部
SpringFramework没有解决了什么问题?
虽然Spring的组件代码是轻量级的,但它的==配置却是重量级==的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。所有这些配置都代表了开发时的损耗。
因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。
除此之外,==项目的依赖管理==也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器
2.Spring不支持分布式,这也是EJB仍然在用的原因之一。
Spring Boot 这家伙简直就是对 Java 企业级应用开发进行了一场浩浩荡荡的革命。如果稍微有几年工作经验的老油条,应该都记得以前的 Java Web 开发模式:Tomcat + WAR包。WEB项目基于spring framework,项目目录一定要是标准的 WEB-INF + classes + lib,而且大量的 xml 配置。如果说,以前搭建一个 SSH 架构的Web项目需要 1 个小时,那么现在应该 10 分钟就可以了。
Spring Boot 能够让你非常容易的创建一个单机版本、生产级别的基于 spring framework 的应用。然后,"just run"即可。Spring Boot 默认集成了很多第三方包,以便你能以最小的代价开始一个项目。
官方对 Spring Boot 的定义:
Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. Spring Boot takes an opinionated view of building production-ready applications.
即 Spring Boot 为快速启动且最小化配置的 Spring 应用而设计,并且它具有用于构建生产级别应用的一套固化的视图。这里的固化的视图,笔者认为可以理解成 Spring Boot 的约定,因为Spring Boot 的设计是约定大于实现的。
为什么有了SpringFramework还会诞生SpringBoot?简单而言,因为虽然Spring的组件代码是轻量级的,但它的配置却是重量级的;所以SpringBoot的设计策略是通过开箱即用和约定大于配置 来解决配置重的问题的。
1.3 特点
Spring Boot的特点非常丰富,以下是一些核心和显著的特点:
自动配置(Auto-configuration) :
- Spring Boot根据添加的jar依赖自动配置Spring应用。例如,如果classpath下存在H2数据库,Spring Boot会自动配置内存数据库。
起步依赖(Starter POMs) :
- 起步依赖是一套定制化的Maven或Gradle配置,用于简化构建配置并提供跨项目的一致性。
独立运行(Executable JARs/WARs) :
- 可以创建不需要外部容器的独立运行的Spring应用。Spring Boot内置了Tomcat、Jetty等Servlet容器。
无需XML配置:
- 通过Java配置(@Configuration)来替代XML配置,使配置更简洁、易于理解和维护。
应用监控和管理(Actuator) :
- 提供了一系列用于监控和管理生产环境的端点,如健康检查、度量信息、审计、应用信息等。
外部配置支持:
- 支持从外部文件(如application.properties或application.yml)中加载配置,使得配置与代码分离,便于不同环境的配置管理。
模板引擎支持:
- 支持多种模板引擎,如Thymeleaf、FreeMarker等,方便快速开发Web应用。
数据访问支持:
- 集成了JPA、Hibernate、JDBC、MongoDB等数据访问技术,简化了数据库操作。
安全支持:
- 与Spring Security集成,提供安全认证和授权。
测试支持:
- 提供了对Spring Boot应用的测试支持,包括Mock MVC和Mock RestServiceServer等。
响应式编程支持:
- 从Spring Boot 2.0开始,支持响应式编程模型,可以与WebFlux一起使用。
微服务支持:
- 与Spring Cloud集成,为微服务架构的开发提供了支持。
无代码生成和XML配置:
- 不需要代码生成和XML配置,一切通过Java API完成。
配置属性绑定:
- 可以轻松地将配置文件中的属性绑定到Spring Bean的字段上。
环境抽象:
- 提供了对不同环境(开发、测试、生产)的配置支持,使得环境切换变得简单。
日志抽象:
- 提供了日志抽象层,支持SLF4J和Logback等日志框架。
依赖管理:
- 提供了依赖管理功能,通过Spring Boot的BOM(Bill of Materials)可以统一管理项目依赖的版本。
这些特点使得Spring Boot成为Java开发中最受欢迎的框架之一,它简化了Spring应用的创建和部署,提高了开发效率,并且使得应用更加易于维护和扩展。
1.4 版本
在学习时,跟多教程区分2.0,3.0版本。在使用时,3.x版与Spring Boot 2.x则需注意,两者有以下不同:
Spring Boot 2.x | Spring Boot 3.x | |
---|---|---|
Spring版本 | Spring 5.x | Spring 6.x |
JDK版本 | >\= 1.8 | >\= 17 |
Tomcat版本 | 9.x | 10.x |
Annotation包 | javax.annotation | jakarta.annotation |
Servlet包 | javax.servlet | jakarta.servlet |
JMS包 | javax.jms | jakarta.jms |
JavaMail包 | javax.mail | jakarta.mail |
以下是 Spring Boot 各个主要版本的介绍和特性变化:
1. Spring Boot 1.x 版本
1.0.x (2015 年发布)
- Spring Boot 1.0 是 Spring Boot 的第一个正式版本,标志着 Spring 项目进入了一个新的时代,简化了 Spring 项目的开发流程。
主要特性:
- 自动配置:自动配置应用程序的许多组件,如数据库连接、Web 框架、消息队列等。
- 嵌入式 Web 服务器支持:支持 Tomcat 和 Jetty 等嵌入式 Web 服务器,使得开发者不再需要配置和管理独立的 Web 服务器。
- 启动器 (Starters) :提供了很多预配置的 Starter(如
spring-boot-starter-web
,spring-boot-starter-data-jpa
)简化了依赖管理。 - 生产级特性:通过
Spring Boot Actuator
提供了健康检查、应用监控等生产级别功能。
1.4.x (2016 年发布)
在 1.4.x 版本中,Spring Boot 引入了一些新的功能和改进:
- Java 8 支持:Spring Boot 更好地支持 Java 8,提供 Lambda 表达式和 Streams 等特性。
- Spring Boot CLI 改进:增强了 Spring Boot CLI(命令行工具)的功能,支持更简洁的 Groovy 脚本开发。
- 更好的 DevTools:增强了开发过程中的热部署和自动重启功能。
- Actuator 扩展:新增了对更多健康检查、性能监控等的支持。
1.5.x (2017 年发布)
Spring Boot 1.5 版本改进了 Spring Boot 项目的可维护性,并增强了对 Spring Framework 5 的支持:
- Java 9 支持:开始为 Java 9 提供实验性的支持。
- Actuator Enhancements:引入了更多监控和健康检查功能。
- Spring Boot Gradle 插件:增强了 Gradle 插件的功能。
- 集成 Spring Framework 5:加强了与 Spring Framework 5 的兼容性。
2. Spring Boot 2.x 版本
2.0.x (2018 年发布)
Spring Boot 2.0 是一个重要的版本,带来了大规模的改进,特别是在对 Spring 5 和 Java 8+ 的支持方面。
- Spring Framework 5 和 Java 8+ 支持:Spring Boot 2.0 完全基于 Spring 5,这使得它能够支持 Java 8 及更高版本,利用 Spring 5 的新特性(如响应式编程、WebFlux 等)。
- WebFlux 引入:引入了响应式编程框架 WebFlux,使得开发者可以编写非阻塞式的 Web 应用。
- Spring Security 5 集成:与 Spring Security 5 集成,增强了对 OAuth2 和 JWT 等认证方式的支持。
- 嵌入式服务器升级:更新了 Tomcat、Jetty 和 Undertow 的版本,支持更多的配置选项。
- 改进的生产监控和管理:进一步增强了 Actuator 功能,支持更多的端点(如
/metrics
,/env
)和数据源集成。
2.1.x (2019 年发布)
Spring Boot 2.1 版本对 2.0 进行了重要的改进和修复,增加了许多新特性:
- Kotlin 支持:提供了更好的 Kotlin 开发支持,增强了 Kotlin 与 Spring Boot 的集成。
- 改进的数据库访问:Spring Data 和 JPA 等数据库访问层增强,支持更多的特性,如批量操作等。
- HTTP/2 支持:支持 HTTP/2 协议,提升 Web 应用的性能。
- Spring Boot DevTools 改进:提升了开发中的自动重启和热部署功能。
- Actuator 改进:增强了健康检查、应用状态监控、JVM 状态等功能。
2.2.x (2019 年发布)
Spring Boot 2.2 增强了对微服务架构的支持,并改善了性能:
- 更好的自动配置机制:改进了自动配置的能力,使得开发者不需要手动配置太多组件。
- Spring Boot 2.2 Actuator Enhancements:增强了 Actuator 的功能,提供更多的生产环境支持。
- Kubernetes 集成:加强了 Spring Boot 应用与 Kubernetes 的集成能力,支持自动化的容器化部署。
2.3.x (2020 年发布)
Spring Boot 2.3 版本带来了对容器化和 Kubernetes 更好的支持:
- 容器化优化:支持构建更小的容器镜像,优化了 Docker 构建流程。
- 增强的 Actuator:引入了对 Prometheus 和 Micrometer 的更好支持,提供了更多的监控选项。
- 增强的日志管理:支持更多的日志配置选项。
3. Spring Boot 3.x 版本
3.0.x (2022 年发布)
Spring Boot 3.0 是一个重要的版本,它引入了许多新的特性,同时也面临重要的技术迁移:
- Java 17 作为最低版本要求:Spring Boot 3.0 不再支持 Java 8 和 Java 11,要求使用 Java 17 或更高版本。
- Spring Framework 6:Spring Boot 3.0 完全基于 Spring Framework 6,支持更多的现代化特性,如更好的原生镜像支持(与 GraalVM 的集成)等。
- AOT 编译(Ahead-of-Time 编译) :支持将应用程序编译成本地代码,提升性能和启动时间,特别适合云原生和微服务架构。
- 原生镜像支持:通过 GraalVM 提供了对原生镜像的支持,大大减少了应用启动时间和内存占用。
- 响应式编程:进一步优化了对响应式编程的支持,特别是对 WebFlux 和 R2DBC(响应式数据库连接)的支持。
- JDK 17+ 支持:原生支持 JDK 17 引入的新特性和 API。
3.1.x (2023 年发布)
Spring Boot 3.1 版本继续增强性能、可靠性和开发者体验:
- 改进的原生镜像支持:进一步提高了与 GraalVM 的兼容性,提升了原生镜像构建的效率。
- 更好的 Kubernetes 支持:Spring Boot 3.1 增强了对 Kubernetes 和云原生环境的集成,支持更多的自动化和配置管理功能。
- 改进的调试和日志支持:引入更多的调试功能,使得开发和排查问题变得更加简单。
- 更新的依赖和兼容性:增强与 Spring Cloud 和其他相关技术的兼容性,支持最新的框架和库版本。
总结
- 1.x 版本:Spring Boot 1.x 版本奠定了 Spring Boot 的基本框架,特别是自动配置、嵌入式服务器等特性。它帮助开发者简化了 Spring 项目的配置和部署。
- 2.x 版本:Spring Boot 2.x 引入了对 Spring 5 和 Java 8+ 的支持,提升了响应式编程(WebFlux)能力,并加强了对微服务和生产环境的支持。
- 3.x 版本:Spring Boot 3.0 引入了 Java 17 支持,并增强了与 GraalVM 的集成,支持原生镜像构建,进一步提升了性能和云原生部署能力。
随着版本的不断更新,Spring Boot 不断提升性能、简化配置、加强与现代开发环境(如微服务、容器化、云原生)的兼容性,成为构建现代 Java 应用程序的重要工具。
1.5 应用场景
Spring Boot 作为一个快速开发框架,因其简化了配置和部署的流程,广泛应用于多种场景。以下是一些典型的 Spring Boot 应用场景:
1. 微服务架构
- 微服务开发:Spring Boot 是构建微服务架构的理想选择。通过与 Spring Cloud 的集成,Spring Boot 可以帮助快速实现服务注册与发现、负载均衡、断路器、API 网关等微服务所需的基础设施。每个微服务可以作为一个独立的 Spring Boot 应用,通过 RESTful API 或消息队列进行交互。
- 典型应用场景:大型电商平台、金融系统、社交媒体平台等。
2. RESTful API 服务
- 快速构建 RESTful API:Spring Boot 提供了丰富的支持,能够快速构建和暴露 RESTful API,且支持 JSON、XML 等数据格式。它还提供了开箱即用的 Swagger 集成,方便开发人员生成 API 文档。
- 典型应用场景:移动端应用后端服务、前端应用(如 React、Vue)与后端进行数据交互、外部系统的集成服务等。
3. 企业级应用
- 传统企业级应用(如业务系统、ERP、CRM) :Spring Boot 可以简化传统企业级应用的开发,减少配置复杂性,并且能够与各种企业级技术(如数据库、消息队列、文件系统等)无缝集成。
- 典型应用场景:企业信息管理系统、供应链管理、客户关系管理(CRM)、财务管理系统等。
4. 批处理任务和数据处理
- 批量数据处理:Spring Boot 配合 Spring Batch 可以高效地处理大规模批处理任务,如定时数据导入导出、数据清理等。Spring Boot 使得这些任务的配置和运行变得更加简单。
- 典型应用场景:大数据处理、日志处理、数据报表生成等。
5. 实时数据处理和流式应用
- 支持响应式编程:Spring Boot 提供了对 Spring WebFlux 的支持,使得构建高并发、低延迟的响应式应用成为可能。它支持异步和非阻塞的处理,非常适合处理实时数据流、事件驱动的系统。
- 典型应用场景:实时数据分析、实时消息推送、在线游戏后端、金融市场监控等。
6. 数据驱动应用
- 与数据库深度集成:Spring Boot 支持与关系型数据库(如 MySQL、PostgreSQL、Oracle)以及 NoSQL 数据库(如 MongoDB、Cassandra)无缝集成,支持自动配置的数据源连接、JPA(Java Persistence API)等。
- 典型应用场景:内容管理系统(CMS)、在线商城、用户管理系统等。
7. 企业级Web应用
- Web应用开发:Spring Boot 支持内嵌的 Web 容器(如 Tomcat、Jetty 等),使得开发 Web 应用变得更加简便。可以使用 Thymeleaf、Freemarker 等模板引擎来渲染 HTML 页面。
- 典型应用场景:博客网站、在线教育平台、企业门户网站等。
8. 实时通讯和消息队列系统
- 集成消息队列和事件驱动架构:Spring Boot 可以与常见的消息队列(如 RabbitMQ、Kafka、ActiveMQ)结合,构建基于消息的架构,用于异步处理、事件驱动系统等。
- 典型应用场景:订单处理系统、交易系统、邮件通知系统等。
9. 单页应用(SPA)后台服务
- 与前端框架协作:Spring Boot 后端可作为单页应用(SPA)如 Angular、React、Vue.js 的后端服务,提供数据接口和业务逻辑。Spring Boot 的 RESTful API 可以与前端应用进行无缝连接,提供数据支持。
- 典型应用场景:社交媒体平台、在线商城、新闻聚合应用等。
10. 云原生应用
- 与 Kubernetes 和 Docker 配合使用:Spring Boot 应用可以轻松地容器化,并通过 Kubernetes 实现自动化部署、扩展和管理,适合云原生开发和部署。
- 典型应用场景:云平台上的微服务、容器化应用等。
11. 定时任务和调度
- 任务调度:Spring Boot 可以与 Spring Scheduler 或 Quartz 集成,轻松实现定时任务调度。开发者可以指定任务的执行时间、周期等。
- 典型应用场景:定时数据同步、定期报告生成、邮件定时发送等。
12. 物联网(IoT)应用
- 支持物联网设备接入:Spring Boot 可以与物联网(IoT)设备进行通信,支持通过 HTTP、WebSocket 或 MQTT 等协议进行实时数据传输。
- 典型应用场景:智能家居、工业设备监控、环境监测系统等。
13. API网关
- 构建 API 网关:Spring Boot 可以用来开发 API 网关,处理请求的路由、负载均衡、认证授权等功能。通过 Spring Cloud Gateway 或 Zuul,可以轻松实现高效的 API 网关。
- 典型应用场景:微服务架构中的 API 网关,服务聚合、请求路由等。
14. 集成与第三方服务
- 与外部系统集成:Spring Boot 能与许多第三方系统和服务(如支付网关、消息队列、云存储等)无缝集成。
- 典型应用场景:支付处理系统、第三方认证(OAuth、SSO)系统、外部数据源的同步等。
总结
Spring Boot 提供了多种特性,使得它非常适合于构建和开发各种类型的应用,尤其是在快速开发、微服务架构、RESTful API、响应式应用等方面展现了其强大的能力。它简化了开发流程,自动配置和内嵌服务器的特性使得部署与运维变得更加方便,因此在企业级系统、互联网应用、物联网等多个领域都有广泛的应用。
二、架构组件
Spring Boot 的架构主要由以下几个核心组件和特性组成:
1. Spring Boot Starter
Spring Boot Starter 是一组预定义的模板,它简化了与常用功能相关的依赖管理。每个 Starter 都代表了一个功能模块,例如 Web、JPA、Security 等。
常见的 Starter:
spring-boot-starter-web
:用于构建 Web 应用,支持 Spring MVC、Tomcat、Jackson 等。spring-boot-starter-data-jpa
:用于与 JPA(Java Persistence API)进行数据访问。spring-boot-starter-security
:为 Spring Boot 应用添加安全性支持。spring-boot-starter-test
:用于单元测试和集成测试。通过使用这些 Starter,开发者只需要关注业务逻辑,不需要处理繁琐的配置。
2. 自动配置(Auto Configuration)
- 自动配置是 Spring Boot 的核心特性之一。Spring Boot 使用
@EnableAutoConfiguration
注解来根据项目中的依赖自动配置 Spring 应用的相关组件。 - 例如,当你引入
spring-boot-starter-web
时,Spring Boot 会自动配置嵌入式的 Tomcat 服务器,并自动配置相关的 Spring MVC 组件。 - 自动配置减少了开发者对配置文件的依赖,使得开发流程更加简便和高效。
3. 嵌入式服务器
- Spring Boot 内置了多个嵌入式 Web 服务器(如 Tomcat、Jetty、Undertow),开发者无需单独部署外部服务器。
- Spring Boot 可以自动选择合适的嵌入式服务器,或者开发者可以通过配置文件来指定使用的服务器。
- 内嵌服务器使得应用部署变得更加简单,应用可以以 JAR 或 WAR 文件形式直接启动。
4. Spring Boot Actuator
- Spring Boot Actuator 提供了一系列监控、管理和健康检查功能。它可以暴露应用的内部状态、配置、性能指标等信息,方便运维人员监控应用的健康状况。
常见的功能包括:
/actuator/health
:查看应用的健康状况。/actuator/metrics
:获取应用的性能指标。/actuator/env
:查看应用的环境配置。
5. Spring Boot CLI
- Spring Boot CLI(命令行工具) 是一个用于通过命令行快速创建和运行 Spring Boot 应用的工具。通过 CLI,开发者可以使用 Groovy 或 Java 编写 Spring Boot 应用,而不需要手动配置项目结构。
- CLI 可以加速开发,适合快速原型开发和小型项目。
6. Spring Boot DevTools
Spring Boot DevTools 是开发时的工具,旨在提升开发体验。它提供了以下功能:
- 热加载:应用代码发生变化时自动重新加载。
- 自动重启:应用发生更改时,自动重启应用以加载最新的代码。
- 自动配置禁用:在开发环境下,禁用某些自动配置以提高开发效率。
7. 配置管理
Spring Boot 提供了多种方式来管理应用的配置:
- application.properties 或 application.yml:用于管理应用配置,支持环境隔离,能够方便地在不同的环境中使用不同的配置。
- Profile:Spring Boot 支持环境配置文件(如
application-dev.properties
、application-prod.properties
),不同的 Profile 可以加载不同的配置。 - Command Line Arguments:通过命令行传递参数覆盖配置文件中的值。
- 外部配置:支持从外部配置文件、环境变量、命令行参数等获取配置,方便在不同环境下进行配置管理。
8. Spring Boot Maven/Gradle 插件
- Spring Boot 提供了 Maven 和 Gradle 插件,使得构建和打包过程更加方便。通过这些插件,可以轻松创建可执行的 JAR/WAR 文件,部署到生产环境中。
插件提供了以下功能:
- 构建 JAR/WAR 包:自动将应用打包成可执行的 JAR 或 WAR 文件。
- 内嵌服务器支持:内嵌的 Tomcat/Jetty 支持使得 Spring Boot 应用在生产环境中无需额外部署服务器。
9. Spring Boot Initializr
- Spring Boot Initializr 是一个 Web 工具,用于快速生成 Spring Boot 项目骨架。开发者可以通过选择不同的依赖、项目类型(Maven 或 Gradle)、Java 版本等,快速创建一个 Spring Boot 项目。
- 访问地址:https://start.spring.io
10. Spring Boot 测试支持
- Spring Boot 提供了丰富的测试支持,使用 Spring TestContext Framework 可以简化单元测试和集成测试的编写。
主要的测试注解:
@SpringBootTest
:加载整个 Spring 应用上下文并进行集成测试。@DataJpaTest
:测试与 JPA 相关的组件。@WebMvcTest
:仅加载 Spring MVC 相关的组件,进行 Web 层的测试。
三、第一个Spring boot项目
这里使用IDEA创建,本地安装JDK。
这里主要展示简要步骤,具体可参考之前的文章——《SpringBoot项目创建,详细流程》
IDEA选择“File”—“New”—“Project”
- Group: 是公司或者组织的名称,是一种命名空间的概念,比如网站,那么group可以是tech.pdai(公司名,一般用公司网站倒序)(项目的分组信息,例如 “com.example”)
- Artifat: 项目的名称,例如 “my-spring-cloud-project”
启动项目
Spring Boot 的自动化配置和内嵌服务器功能,让开发者摆脱了繁琐的配置工作。希望通过这篇文章,你能对 Spring Boot 有一个更清晰的认识,并开始在项目中使用它。