一、Spring Boot概述
1.1 什么是 SpringBoot
SpringBoot 是由 Pivotal 团队(后被 VMware 收购)于 2014 年推出的基于 Spring 框架的开源框架,它旨在简化 Spring 应用的初始搭建和开发过程。作为 Spring 生态系统的重要组成部分,SpringBoot 并非替代 Spring,而是在 Spring 基础上提供了一套约定优于配置的开发范式,使开发者能够更快速地构建生产级别的 Spring 应用。
SpringBoot 的核心思想是 "约定优于配置"(Convention over Configuration),通过提供一系列默认配置和自动化机制,减少了传统 Spring 应用中繁琐的 XML 配置和手动依赖管理工作,让开发者可以专注于业务逻辑的实现而非基础设施的配置。
1.2 SpringBoot 的发展背景
在 SpringBoot 出现之前,开发 Spring 应用需要进行大量的手动配置:
- 繁琐的 XML 配置文件
- 手动管理各种依赖及其版本兼容性
- 复杂的部署流程
- 需要手动配置 Web 服务器
这些问题导致 Spring 应用的初始化和开发效率低下,尤其对新手不够友好。为解决这些问题,SpringBoot 应运而生,它整合了 Spring 生态系统的最佳实践,提供了一套快速开发 Spring 应用的解决方案。
自 2014 年首次发布以来,SpringBoot 已成为 Java 开发领域最受欢迎的框架之一,目前最新稳定版本为 3.x(基于 Java 17 + 和 Spring Framework 6.x)。
1.3 SpringBoot 的核心特性(面试题)
1.3.1 自动配置(Auto-configuration)
SpringBoot 的核心特性之一,能够根据类路径中的依赖自动配置 Spring 应用。它会检查类路径中的 JAR 包,并基于这些依赖自动配置 Spring Bean。例如:
- 如果类路径中有
spring-webmvc依赖,SpringBoot 会自动配置 DispatcherServlet - 如果检测到 H2 数据库的依赖,会自动配置内存数据库
自动配置可以通过@EnableAutoConfiguration注解开启,而@SpringBootApplication注解已包含此注解。
1.3.2 起步依赖(Starter Dependencies)
SpringBoot 提供了一系列命名为spring-boot-starter-*的依赖模块,每个 starter 包含了特定功能所需的所有依赖。例如:
spring-boot-starter-web:包含开发 Web 应用所需的 Spring MVC、Tomcat 等依赖spring-boot-starter-data-jpa:包含 Spring Data JPA 和 Hibernate 等依赖spring-boot-starter-security:包含 Spring Security 相关依赖
起步依赖解决了传统开发中依赖版本冲突的问题,SpringBoot 会自动管理这些依赖的版本兼容性。
1.3.3 嵌入式服务器(Embedded Servers)
SpringBoot 内置了多种嵌入式 Web 服务器,包括:
- Tomcat(默认)
- Jetty
- Undertow
这使得 SpringBoot 应用可以直接打包为可执行 JAR 文件,无需部署到外部服务器,简化了应用的部署和运行流程。
1.3.4 生产就绪特性(Production-Ready Features)
SpringBoot 提供了一系列适用于生产环境的特性:
- 应用监控(通过 Spring Boot Actuator)
- 健康检查
- 外部化配置
- 日志管理
- 应用指标收集
这些特性使开发者能够轻松构建符合生产标准的应用程序。
1.3.5 无代码生成和 XML 配置
SpringBoot 完全摒弃了 XML 配置,采用注解和 JavaConfig 的方式进行配置,同时不需要任何代码生成,保持了代码的简洁性和可维护性。
1.3.6 开箱即用(Out-of-the-box)
SpringBoot 提供了合理的默认配置,开发者可以 "开箱即用",无需手动配置即可启动应用。同时,这些默认配置也可以根据需求进行自定义,实现了灵活性和简便性的平衡。
1.4 SpringBoot 的技术栈组成
SpringBoot 构建在 Spring 生态系统之上,并整合了多种常用技术:
- 核心框架:Spring Framework
- Web 框架:Spring MVC
- 数据访问:Spring Data Mybatis,Spring Data MongoDB,Spring Data Redis 等
- 安全框架:Spring Security
- 依赖注入:Spring IoC 容器
- 嵌入式服务器:Tomcat、Jetty、Undertow
- 构建工具:Maven、Gradle
- 测试框架:JUnit、Mockito、Spring Test
1.5 SpringBoot 的应用场景
SpringBoot 适用于各种 Java 应用开发场景:
- Web 应用开发:RESTful API、传统 Web 应用
- 微服务架构:作为微服务的基础框架
- 企业级应用:整合各种企业级组件
- 数据处理应用:批处理任务、数据 ETL
- 云原生应用:适合开发部署在云环境的应用
- 物联网应用:设备数据采集和处理
无论是小型应用还是大型企业级系统,SpringBoot 都能提供高效的开发体验。
1.6 SpringBoot 与其他技术的关系
- 与 Spring Framework:SpringBoot 是 Spring Framework 的扩展和简化,不是替代关系
- 与 Spring Cloud:SpringBoot 是 Spring Cloud 的基础,Spring Cloud 构建在 SpringBoot 之上,提供微服务治理能力
- 与 Jakarta EE:SpringBoot 可以替代传统的 Jakarta EE 应用开发,提供更简洁的开发方式
- 与微服务:SpringBoot 是构建微服务的理想选择,但本身不是微服务框架
1.7 为什么选择 SpringBoot
- 提高开发效率:减少配置工作,让开发者专注于业务逻辑
- 简化部署流程:可执行 JAR 包直接运行,无需额外服务器配置
- 降低学习成本:统一的开发范式,减少对框架细节的关注
- 强大的社区支持:活跃的社区和丰富的文档资源
- 良好的扩展性:可以根据需求自定义配置,扩展灵活
- 与主流技术无缝集成:轻松整合各种开源框架和工具
- 适合敏捷开发:快速迭代,缩短开发周期
SpringBoot 已经成为 Java 开发的事实标准之一,掌握 SpringBoot 是现代 Java 开发者的必备技能。
二、单体应用和微服务应用
单体应用是一种传统的应用架构模式,指将所有功能模块(如用户模块、订单模块、支付模块等)打包在一个应用程序中,部署在单一进程中的应用。
单体应用优缺点:
优点:
- 易开发,架构简单,技术成本低
- 易于测试:所有功能在一个项目,方便测试
- 易于部署:一个Tomcat就可以实现部署,简单方便
缺点:
- 代码臃肿不方便开发维护(代码可读性差)
- 代码编译系统启动变慢
- 系统扩展性能变差(牵一发而动全身)
- 无法针对某一个业务做扩展(集群)
- 对大数据量,高并发量的处理不占优势
- 技术选型单一
- 模块/业务耦合度高
微服务是在SOA架构上的一种发展,简单来说微服务就是把单一的应用进行差分,差分成多个微小服务,每个服务独立运行,每个服务只需要专注一个业务即可,并且每个服务都可以有自己的数据库,多个微服务之间相互配合完成整个系统的业务,这就是微服务.如果某个子系统/服务压力很大,可以单独对该子系统/服务再做集群。

三、Spring Boot入门程序
3.1 创建springboot项目可能出现的问题
错误信息如下:

解决办法:
1、打开idea最上角file选项的new->project…

2、点击spring initalizr 选择Server URL,
把值设置为:http://start.springboot.io/ 或者 http://start.aliyun.com

3.2 Spring Initializer快速创建Spring Boot项目(jar)
第一步: 创建项目



第二步: 加入web场景启动器依赖包到pom.xml文件

注意:
注意事项:
<!-- web项目SpringBoot启动器依赖 针对3.X.X版本使用web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- web项目SpringBoot启动器依赖 针对4.X.X版本使用webmvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
第三步: 创建controller

源码的写法和我们之前的写法定义是一样的,可以写dao,service,controller等
第四步:启动springboot项目
- 找到带有 @SpringBootApplication 注解的主类
- 运行 main 方法,启动 SpringBoot 应用
- 项目启动,可以看到springboot标志


运行结果:

3.2.1 项目打包运行
第一步:先打包

第二步:运行包
java -jar 包名 ##就可以运行jar包
javaw -jar 包名 ##就可以后台启动

注意:在运行包时出现以上情况, 说明SpringBoot版本与JDK版本不兼容
解决方案:降低SpringBoot版本 或者 将JDK版本提高成22版本即可
将SpringBoot版本 替换成 2.6.13后,重新打包运行测试即可


第三步:访问测试

3.3 Spring Initializer快速创建Spring Boot项目(war)
第一步:创建项目

项目创建好后的结构:

项目会自动加入web模块场景启动器依赖:

第二步:项目结构解析
- java文件夹目录结构中自动创建好指定包和Spring Boot启动主程序SpringbootApplication.class;
- resources文件夹中目录结构
-
- static:保存所有的静态资源; js css images;
- templates:保存所有的模板页面,(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面),可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
第三步:查看springboot的主程序

@SpringBootApplication注解说明:这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;并将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器,就不需要再写注解扫描器了;
第四步:编写Controller代码

第五步:运行主程序并进行测试

注意:如果使用外部tomcat部署当前war类型的springboot项目要在项目中加入以下类:
建议使用springboot内置tomcat

ServletInitializer文件的主要作用是配置Servlet初始化,使得Spring Boot应用程序能够以WAR包的形式部署在外部的Servlet容器中,如Tomcat. 外部tomcat启动后,springboot项目会自动调用该类的 configure方法,并加载主程序,加载springboot初始化配置;
3.4 Maven项目转springboot项目
创建普通的Maven项目, 如果想让当前Maven项目成为springboot项目需要添加如下依赖:


HelloController类:

运行主程序并进行测试:

四、Spring Boot配置文件
1.字面量:普通的值(数字、字符串、布尔)

2.对象、Map(键值对)

3.集合(List, Set)

4.1 yml / yaml 配置文件
语法格式:

4.1.1 基本语法
总结以上配置的作用:
- 可以为配置文件的默认值或者值, 进行修改
- 可以为实体类进行赋值
4.1.3 配置文件值的注入
1.构建bean对象


2.构建配置文件

3.执行单元测试查看person对象的值

4.引入配置文件处理器插件

4.2 properties 配置文件
4.2.1 properties语法
以KEY=VALue键值对的方式设置值
4.2.2 值的写法
1.字面量:普通的值(数字,字符串,布尔)
name=张三
2.对象、Map(属性和值)(键值对)
#指定访问当前项目的名称
server.servlet.context-path=/demo02person.name=张三
person.age=12
maps.key1=value1
maps.key2=value2
3.集合(List,Set)
hobbies=singing,dancing,running
4.2.3 配置文件值的注入
1.构建bean对象


2.构建配置文件

3.执行单元测试查看person对象的值

注意:如果输出有中文乱码问题修改idea编码格式后,删除properties配置文件重新创建

多个配置文件加载顺序:
如果在项目中即存在application.yml也存在application.properties配置文件时:
1.优先级规则
- 如果项目中同时存在application.properties和application.yml文件,application.properties的优先级高于application.yml。
- 这意味着,如果两个文件中都定义了相同的属性(例如: server.port),application.properties中的值会覆盖application.yml的值。
2.加载顺序
- SpringBoot会先加载application.properties文件中的配置文件,然后加载application.yml文件中的配置
- 然后,由于优先级的原因,即使application.yml中的配置被加载,其值也会被application.properties中的相同属性覆盖。
4.3 多环境配置
在开发实际的 Java 应用时,通常会遇到不同的运行环境,比如开发环境、测试环境和生产环境。每个环境都有不同的配置需求,例如数据库连接信息、服务端口、日志级别等。如果我们没有一个灵活的机制来区分和管理这些不同环境下的配置,代码中的配置就会变得混乱且不易维护。
那么,我们在实际的工作中,是如何来确保在对应环境下读取对应的配置信息呢?
Spring Boot 提供了强大的多环境配置管理功能,能够帮助我们根据不同的环境加载不同的配置文件,从而让应用在不同的环境下能保持一致性和灵活性。通过合理使用 Spring Boot 的 Profile 功能,我们可以在开发、测试和生产等不同环境中,动态地切换配置,避免了硬编码配置的麻烦,提高了系统的可维护性。
多环境配置的应用场景
开发:在开发过程中,通常会使用本地数据库、调试模式和其他开发工具的配置。
测试:集成测试、单元测试等需要连接测试环境的数据库或第三方服务,并根据测试要求配置环境。
生产:生产环境通常需要更高的安全性和性能配置,比如使用外部服务、生产级数据库连接、严格的日志管理等。
如果每次切换环境都要手动修改
application.yml中的数据库地址、端口、密钥等信息,不仅效率低下,还极易出错。
指定环境的配置方式
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境;
1、多文件多环境形式:
格式:application-{profile}.properties/yml 其中 {profile} 表示环境标识
例如:可以在项目中创建如下主配置文件:
application-dev.properties、
application-test.properties、
application-prod.properties、
application.properties,
默认使用application.properties,可以通过配置spring.profiles.active=profile指定使用某个环境的配置文件。
2、yml支持单文件多环境形式:
例如:可以在项目中创建如下主配置文件:
application-dev.yml、
application-test.yml、
application-prod.yml、
application.yml,
默认使用application.yml,可以通过以下配置指定使用某个环境的配置文件。
spring:
profiles:
active: dev # 激活开发环境
3、激活方式:
在配置文件中指定 spring.profiles.active=dev
命令行 java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
案例实现
1.项目中设置多个开发环境的配置文件

2.设置使用指定的配置文件

3.运行测试:
运行后先加载application.properties配置文件,再加载application-prod.properties配置文件;

3464

被折叠的 条评论
为什么被折叠?



