基础篇
快速入门
快速上手
使用Idea创建项目
• 1. 创建新模块,选择Spring Initializr,并配置模块相关基础信息

• 2. 选择当前模块需要使用的技术集

• 3. 开发控制器类

• 4. 运行自动生成的Application类

• 注意事项:

使用springboot官网创建
• 基于SpringBoot官网创建项目,地址:https://start.spring.io/

• 1. 打开SpringBoot官网,选择Quickstart Your Project
• 2. 创建工程,并保存项目
• 3. 解压项目,通过IDE导入项目
• 注意事项:springboot的官网是外国网站存在不能访问的可能
使用阿里云创建项目
• 创建模块,选择start来源为自定义URL,其他类似第一种创建方式

手动创建项目
• 1. 创建普通Maven工程
• 2. 继承spring-boot-starter-parent
• 3. 添加依赖spring-boot-starter-web
•

• 4. 制作引导类Application
•

入门案例解析
parent
•

• 1. 开发SpringBoot程序要继承spring-boot-starter-parent
• 2. spring-boot-starter-parent中定义了若干个依赖管理
• 3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
• 4. 继承parent的形式也可以采用引入依赖的形式实现效果
starter
•

• 1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter
• 2. 每个不同的starter根据功能不同,通常包含多个依赖坐标
• 3. 使用starter可以实现快速配置的效果,达到简化配置的目的
引导类
•

• 1. SpringBoot工程提供引导类用来启动程序
• 2. SpringBoot工程启动后创建并初始化Spring容器
辅助功能(内嵌tomcat)
•

•

基础配置
属性配置
属性配置方式
• SpringBoot默认配置文件application.properties,通过键值对配置对应属性
基础配置案例
• 修改服务器端口
• server.port=80
• 关闭运行日志图标(banner)
• spring.main.banner-mode=off
• 设置日志相关
• logging.level.root=debug
SpringBoot内置属性查询
• https://springdoc.cn/spring-boot/
配置文件类型
• .properties
• .yml(主流格式)
• .yaml
SpringBoot配置文件加载顺序
•

•

配置文件提示信息消失处理
•

yaml数据格式
yaml
•

yaml语法规则
• 基础概念
•

• 字面值表示方式
•

• 数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
•

yaml数据读取
• 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
•

• 数组用中括号加索引的方式
• 在配置文件中可以使用属性名引用方式引用属性
•

• 属性值中如果出现转移字符,需要使用双引号包裹
•

• 使用Environment对象封装全部配置信息
• 使用@Autowired自动装配数据到Environment对象中
• 自定义对象封装指定数据的作用
•

•

整合第三方技术
整合junit
SpringBoot整合JUnit
•

•

结合启动配置类整合JUnit
•

整合mybatis
1. 创建新模块,选择Spring初始化,并配置模块相关基础信息
•

2. 选择当前模块需要使用的技术集(MyBatis、MySQL)
•

3. 设置数据源参数
•

• 配置数据源时,密码为0开头的需要加双引号,如:”000000”
• 注意:Mysql驱动版本大于8.0时,需要在url连接串中配置时区
•

4. 定义数据层接口与映射配置
•

• 数据库SQL映射需要添加@Mapper被容器识别到
5. 测试类中注入dao接口,测试功能
•

整合mybatis-plus
1. 手动添加SpringBoot整合MyBatis-Plus的坐标,可以通过mvnrepository获取
• 由于springboot未收录mybatis-plus插件,需要指定Version

2. 定义数据层接口与映射配置,继承BaseMapper
•

3. 其他同SpringBoot整合MyBatis
整合Druid
1. 导入Druid对应的starter
•

2. 变更Druid的配置方式
• 推荐配置方式

• 默认配置方式

SSMP整合案例
1. 模块创建
1. 创建项目 ,构选Spring Web 与 MySql坐标
2. 修改配置文件为yml格式
3. 设置端口为80方便访问
2. 实体类开发
1. 使用lombok简化开发
• 导入lombok无需指定版本,由SpringBoot提供版本

• 给指定实体类添加@Data注解(为当前实体类在编译期设置对应的get/set方法,toString方法,hashCode方法,equals方法等)

3. 数据层开发
1. 导入MyBatisPlus与Druid对应的starter
•

2. 配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)
•

3. 继承BaseMapper并指定泛型
•

4. 制作测试类测试结果
•

5. 为方便开发可以开启MyBatisPlus日志
•

数据层开发——分页功能
• 分页操作需要设定分页对象IPage
•

• IPage对象中封装了分页操作中的所有数据
•

• 分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现
•

使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
•

• 支持动态拼写查询条件

4. 业务层开发
普通形式开发
• 接口定义

• 实现类定义

• 实现类定义

• 测试类定义

快速开发
• 快速方案方案

• 接口定义

• 实现类定义

• 实现类追加功能

•

5. 表现层开发
1. 基于Restful制作表现层接口

2. 接收参数

3. 表现层消息一致性处理
• 设计统一的返回值结果类型便于前端开发读取数据

• 设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

4. 业务消息一致性处理
• 后台代码BUG导致数据格式不统一性

• 对异常进行统一处理,出现异常后,返回指定信息

• 修改表现层返回结果的模型类,封装出现异常后对应的信息

5. 分页功能
• 分页查询

6. 删除功能维护
• 对查询结果进行校验,如果当前页码值大于最大页码值,使用最大页码值作为当前页码值重新查询

开发实用篇
1. 热部署
1. 手动启动热部署
1. 开启开发者工具

2. 激活热部署:Ctrl + F9(构建快捷键)
3. 关于热部署

2. 自动启动热部署
1. 设置自动构建项目(设置里先设置)

2. 设置自动构建项目(修改注册表)

3. 激活方式:Idea失去焦点5秒后启动热部署
注意:idea2022以上方法不适用。详情前往IDEA2022.1热部署网站查看
3. 热部署范围配置
1. 默认不触发重启的目录列表

2. 自定义不参与重启排除项

4. 关闭热部署
1. 设置高优先级属性禁用热部署

2. 配置高级
1. @ConfigurationProperties
使用@ConfigurationProperties为第三方bean绑定属性

@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器管控

注意事项@EnableConfigurationProperties与@Component不能同时使用
解除使用@ConfigurationProperties注释警告(有时候会提示配置注解处理器没有配置,添加以下的坐标即可解决)

2. 宽松绑定/松散绑定
@ConfigurationProperties绑定属性支持属性名宽松绑定

注意事项
• 宽松绑定不支持注解@Value引用单个属性的方式
• 绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
3. 常量计量单位绑定
SpringBoot支持JDK8提供的时间与空间计量单位

JDK8支持的时间与空间计量单位

4. 数据校验
1. 添加JSR303规范坐标与Hibernate校验框架对应坐标

2. 对Bean开启校验功能

3. 设置校验规则

3. 测试
1. 加载测试专用属性
1. 在启动测试环境时可以通过properties参数设置测试环境专用的属性

2. 在启动测试环境时可以通过args参数设置测试环境专用的传入参数

2. 加载测试专用配置
1. 使用@Import注解加载当前测试类专用的配置

3. web环境模拟测试
1. 模拟端口

2. 虚拟请求测试

3. 虚拟请求状态匹配

4. 虚拟请求响应体匹配

5. 虚拟请求响应体(json)匹配

6. 虚拟请求响应头匹配

4. 数据层回滚测试
1. 为测试用例添加事务,SpringBoot会对测试用例对应的事务提交操作进行回滚

2. 如果想在测试用例中提交事务,可以通过@Rollback注解设置

5. 测试用例数据设定
1. 测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值

4. 数据层解决方案
1. SQL
1. 数据源配置格式
• 格式一

• 格式二

2. 数据源配置
• SpringBoot提供了3种内嵌的数据源对象供开发者选择

• 通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,如需配置,在下一级配置中设置具体设定

• 注意:HiKariCP是springboot默认配置的,如果使用另外两个,需要禁用掉HiKariCP
3. 持久化技术
• 内置持久化解决方案——JdbcTemplate

• 需要配置pom文件(mybatisplus默认内置此功能)

3. 内嵌数据库
• SpringBoot提供了3种内嵌数据库供开发者选择,提高开发测试效率

• H2
• 导入H2相关坐标

• 设置当前项目为web工程,并配置H2管理控制台参数

• 操作数据库(创建表)

• 设置访问数据源

• H2数据库控制台仅用于开发阶段,线上项目请务必关闭控制台功能

• SpringBoot可以根据url地址自动识别数据库种类,在保障驱动类存在的情况下,可以省略配置

2. NOSQL
1. Redis

• 导入SpringBoot整合Redis坐标

• 配置Redis(采用默认配置)

• RedisTemplate提供操作各种数据存储类型的接口API

• 客户端:RedisTemplate

• 客户端:RedisTemplate以对象作为key和value,内部对数据进行序列化

• 客户端:StringRedisTemplate以字符串作为key和value,与Redis客户端操作等效

• 客户端选择:jedis

• 配置客户端

• 配置客户端专用属性

• lettcus与jedis区别

2. Mongodb

• 应用场景

• 安装启动

• 可视化客户端——Robo 3T

• 基础CURD

• 基础查询

• SpringBoot整合Mongodb
• 导入Mongodb驱动

• 配置客户端

• 客户端读写Mongodb

3. ElasticSearch(ES)
• Elasticsearch是一个分布式全文搜索引擎

• ES下载与安装

• 创建/查询/删除索引

• IK分词器下载:https://github.com/medcl/elasticsearch-analysis-ik/releases
• 创建索引并指定规则

• 文档操作
• 创建文档

• 查询文档

• 条件查询

• 删除文档

• 修改文档(全量修改)

• 修改文档(部分修改)

• 整合ES
• 配置

• SpringBoot平台并没有跟随ES的更新速度进行同步更新,ES提供了High Level Client操作ES

• 客户端
• 初始化

• 改进

• 测试

• 创建索引

• 添加文档

• 批量添加文档

• 按id查询文档

• 按条件查询文档

5. 整合第三方技术
1. 缓存
缓存作用

SpringBoot启用缓存的方式
• 导入缓存技术对应的starter

• 启用缓存

• 设置当前操作的结果数据进入缓存

SpringBoot提供的缓存方案

缓存使用案例—手机验证码
• 开启验证码

• 业务层接口

• 业务层设置获取验证码操作,并存储缓存,手机号为key,验证码为value

• 业务层设置校验验证码操作,校验码通过缓存读取,返回校验结果

缓存供应商变更:Ehcache
• 加入Ehcache坐标

• 缓存设定为使用Ehcache

• 提供ehcache配置文件ehcache.xml

缓存供应商变更:Redis
• 加入Redis坐标(缓存供应商实现)

• 配置Redis服务器,缓存设定为使用Redis

• 设置Redis相关配置

缓存供应商变更:memcached
• 下载memcached地址:https://www.runoob.com/memcached/window-install-memcached.html
• 安装memcached

• 运行memcached

• memcached客户端选择

• 加入Xmemcache坐标(缓存供应商实现)

• 配置memcached服务器必要属性

• 创建读取属性配置信息类,加载配置

• 创建客户端配置类

• 配置memcached属性

•

缓存供应商变更:jetcache

• 加入jetcache坐标

• 配置远程缓存必要属性

• 配置本地缓存必要属性

• 配置范例

• 配置属性说明

• 开启jetcache注解支持

• 声明缓存对象

• 操作缓存

• 启用方法注解

• 使用方法注解操作缓存

•

• 缓存对象必须保障可序列化

• 查看缓存统计报告

缓存供应商变更:j2cache

• 加入j2cache坐标,加入整合缓存的坐标

• 配置使用j2cache(application.yml)

• 配置一级缓存与二级缓存以及一级缓存数据到二级缓存的发送方式(j2cache.properties)

• 设置使用缓存

•

2. 任务
SpringBoot整合Quartz

• 导入SpringBoot整合quartz的坐标

• 定义具体要执行的任务,继承QuartzJobBean

• 定义工作明细与触发器,并绑定对应关系

Spring Task
• 开启定时任务功能

• 设置定时执行的任务,并设定执行周期

• 定时任务相关配置

3. 邮件
SpringBoot整合JavaMail

• 导入SpringBoot整合JavaMail的坐标

• 配置JavaMail

• 配置发送信息文本

• 发送邮件

• 附件与HTML文本支持

4. 消息
JMS

AMQP

MQTT

ActiveMQ
• 下载地址安装:解压缩
• 开启服务

• SpringBoot整合ActiveMQ
• 导入SpringBoot整合ActiveMQ坐标

• 配置ActiveMQ(采用默认配置)

• 生产与消费消息(使用默认消息存储队列)

• 生产与消费消息(指定消息存储队列)

• 使用消息监听器对消息队列监听

• 流程性业务消息消费完转入下一个消息队列

RabbitMQ
• RabbitMQ基于Erlang语言编写,需要安装Erlang

• RabbitMQ下载安装:傻瓜式安装
• 服务

• 服务管理可视化(插件形式)

• SpringBoot整合RabbitMQ
• 导入SpringBoot整合RabbitMQ坐标

• 配置RabbitMQ (采用默认配置)

• 定义消息队列(direct)

• 生产与消费消息(direct)

• 使用消息监听器对消息队列监听(direct)

• 使用多消息监听器对消息队列监听进行消息轮循处理(direct)

• 定义消息队列(topic)

• 绑定键匹配规则

• 生产与消费消息(topic)

• 使用消息监听器对消息队列监听(topic)

RocketMQ

• 命名服务器与broker

• 启动服务

• 测试服务

• Springboot整合RocketMQ
• 导入SpringBoot整合RocketMQ坐标

• 配置RocketMQ (采用默认配置)

• 生产消息

• 生产异步消息

• 使用消息监听器对消息队列监听

Kafka

• 启动

• topic

• 测试

• springboot整合kafka
• 导入SpringBoot整合Kafka坐标

• 配置Kafka (采用默认配置)

• 生产消息

• 使用消息监听器对消息队列监听

6. 监控
监控的意义

监控的实施方式

可视化监控平台
Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。 客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应信息。
• Admin服务端

• Admin客户端

• Admin服务端配置

• 设置启用Spring-Admin

• Admin客户端配置

• 启动预览图

监控原理

监控端点1

监控端点2

Web程序专用端点

启用指定端点

启用所有端点

暴露端点功能

JMX和web端点差异1

JMX和web端点差异2

自定义监控指标
为info端点添加自定义指标配置方式

为info端点添加自定义指标代码方式

为Health端点添加自定义指标

为Metrics端点添加自定义指标

自定义端点

运维实用篇
打包与运行
windows版
SpringBoot项目快速启动

注意事项 (不使用maven插件打包运行时会出现***.jar中没有出现主清单属性)

可执行jar包目录结构

jar包描述文件(MANIFEST.MF)

命令行启动常见问题及解决方案

Linux版



配置高级
临时属性设置


带属性启动SpringBoot程序,为程序添加运行属性

编程方式携带参数启动

配置文件分类
1. SpringBoot中4级配置文件

2. 作用:

3. 配置文件分为4种

4. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序
自定义配置文件
通过启动参数加载配置文件(无需书写配置文件扩展名,properties与yml文件格式均支持)

通过启动参数加载指定文件路径下的配置文件

通过启动参数加载指定文件路径下的配置文件时可以加载多个配置

重要说明

多环境开发
多环境开发(YAML版)
配置信息

新版配置

多配置文件格式

多环境开发配置文件书写技巧
• 一

• 二

• 二

• 注意事项:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
多环境开发(Properties版)
多配置文件格式

properties文件多环境配置仅支持多文件格式
多环境开发控制
Maven与SpringBoot多环境兼容
• 1. Maven中设置多环境属性

• 2. SpringBoot中引用Maven属性

• 3. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息
4. 日志
1. 日志基础
日志作用

添加日志记录操作

日志级别

设置日志输出级别

设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别

使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作
2. 日志输出格式控制
设置日志输出格

3. 日志文件
设置日志文件

日志文件详细配置

原理篇
自动配置
bean的加载方式
1. XML方式声明bean

2. XML+注解方式声明bean

• 其他注解方式

3. 注解方式声明配置类

• 扩展1

• 扩展2

• 扩展3

4. 使用@Import注解导入要注入的bean对应的字节码

• 扩展4

5. 使用上下文对象在容器初始化完毕后注入bean

6. 导入实现了ImportSelector接口的类,实现对导入源的编程式处理

7. 导入实现了ImportBeanDefinitionRegistrar接口的类

8. 导入实现了BeanDefinitionRegistryPostProcessor接口的类

bean的加载控制
bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标。

根据任意条件确认是否加载bean

使用@Conditional注解的派生注解设置各种组合条件控制bean的加载
• 匹配指定类

• 未匹配指定类

• 匹配指定类型的bean

• 匹配指定名称的bean

• 匹配指定环境

bean依赖属性配置
将业务功能bean运行需要的资源抽取成独立的属性类(******Properties),设置读取配置文件信息

配置文件中使用固定格式为属性类注入数据

定义业务功能bean,通常使用@Import导入,解耦强制加载bean

使用@EnableConfigurationProperties注解设定使用属性类时加载bean

自动配置原理

变更自动配置
自定义自动配置(META-INF/spring.factories)

控制SpringBoot内置自动配置类加载

变更自动配置:去除tomcat自动配置(条件激活),添加jetty自动配置(条件激活)

自定义starter
案例:统计独立IP访问次数
需求分析

自定义starter
业务功能开发

自动配置类

配置

模拟调用(非最终版)

开启定时任务功能

设置定时任务

定义属性类,加载对应属性

设置加载Properties类为bean

根据配置切换设置

明细模式报表模板

极简模式报表模板

配置信息

自定义bean名称

放弃配置属性创建bean方式,改为手工控制

使用#{beanName.attrName}读取bean的属性

自定义拦截器

设置核心配置类,加载拦截器

辅助功能开发
导入配置处理器坐标

进行自定义提示功能开发

核心原理
SpringBoot启动流程

监听器类型

Spring程序与SpringBoot程序对比
