0%

SpringBoot学习

基础篇

快速入门

快速上手

使用Idea创建项目

• 1. 创建新模块,选择Spring Initializr,并配置模块相关基础信息

desc

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

desc

• 3. 开发控制器类

desc

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

desc

• 注意事项:

desc

使用springboot官网创建

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

desc

• 1. 打开SpringBoot官网,选择Quickstart Your Project

• 2. 创建工程,并保存项目

• 3. 解压项目,通过IDE导入项目

• 注意事项:springboot的官网是外国网站存在不能访问的可能

使用阿里云创建项目

• 创建模块,选择start来源为自定义URL,其他类似第一种创建方式

desc

手动创建项目

• 1. 创建普通Maven工程

• 2. 继承spring-boot-starter-parent

• 3. 添加依赖spring-boot-starter-web

desc

• 4. 制作引导类Application

desc

入门案例解析

parent

desc

• 1. 开发SpringBoot程序要继承spring-boot-starter-parent

• 2. spring-boot-starter-parent中定义了若干个依赖管理

• 3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

• 4. 继承parent的形式也可以采用引入依赖的形式实现效果

starter

desc

• 1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter

• 2. 每个不同的starter根据功能不同,通常包含多个依赖坐标

• 3. 使用starter可以实现快速配置的效果,达到简化配置的目的

引导类

desc

• 1. SpringBoot工程提供引导类用来启动程序

• 2. SpringBoot工程启动后创建并初始化Spring容器

辅助功能(内嵌tomcat)

desc

desc

基础配置

属性配置

属性配置方式

• 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配置文件加载顺序

desc

desc

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

desc

yaml数据格式

yaml

desc

yaml语法规则

• 基础概念

desc

• 字面值表示方式

desc

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

desc

yaml数据读取

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

desc

• 数组用中括号加索引的方式

• 在配置文件中可以使用属性名引用方式引用属性

desc

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

desc

• 使用Environment对象封装全部配置信息

• 使用@Autowired自动装配数据到Environment对象中

• 自定义对象封装指定数据的作用

desc

desc

整合第三方技术

整合junit

SpringBoot整合JUnit

desc

desc

结合启动配置类整合JUnit

desc

整合mybatis

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

desc

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

desc

3. 设置数据源参数

desc

• 配置数据源时,密码为0开头的需要加双引号,如:”000000”

• 注意:Mysql驱动版本大于8.0时,需要在url连接串中配置时区

desc

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

desc

• 数据库SQL映射需要添加@Mapper被容器识别到

5. 测试类中注入dao接口,测试功能

desc

整合mybatis-plus

1. 手动添加SpringBoot整合MyBatis-Plus的坐标,可以通过mvnrepository获取

• 由于springboot未收录mybatis-plus插件,需要指定Version

desc

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

desc

3. 其他同SpringBoot整合MyBatis

整合Druid

1. 导入Druid对应的starter

desc

2. 变更Druid的配置方式

• 推荐配置方式

desc

• 默认配置方式

desc

SSMP整合案例

1. 模块创建

1. 创建项目 ,构选Spring Web 与 MySql坐标

2. 修改配置文件为yml格式

3. 设置端口为80方便访问

2. 实体类开发

1. 使用lombok简化开发

• 导入lombok无需指定版本,由SpringBoot提供版本

desc

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

desc

3. 数据层开发

1. 导入MyBatisPlus与Druid对应的starter

desc

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

desc

3. 继承BaseMapper并指定泛型

desc

4. 制作测试类测试结果

desc

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

desc

数据层开发——分页功能

• 分页操作需要设定分页对象IPage

desc

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

desc

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

desc

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

desc

• 支持动态拼写查询条件

desc

4. 业务层开发

普通形式开发

• 接口定义

desc

• 实现类定义

desc

• 实现类定义

desc

• 测试类定义

desc

快速开发

• 快速方案方案

desc

• 接口定义

desc

• 实现类定义

desc

• 实现类追加功能

desc

desc

5. 表现层开发

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

desc

2. 接收参数

desc

3. 表现层消息一致性处理

• 设计统一的返回值结果类型便于前端开发读取数据

desc

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

desc

4. 业务消息一致性处理

• 后台代码BUG导致数据格式不统一性

desc

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

desc

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

desc

5. 分页功能

• 分页查询

desc

6. 删除功能维护

• 对查询结果进行校验,如果当前页码值大于最大页码值,使用最大页码值作为当前页码值重新查询

desc

开发实用篇

1. 热部署

1. 手动启动热部署

1. 开启开发者工具

desc

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

3. 关于热部署

desc

2. 自动启动热部署

1. 设置自动构建项目(设置里先设置)

desc

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

desc

3. 激活方式:Idea失去焦点5秒后启动热部署

注意:idea2022以上方法不适用。详情前往IDEA2022.1热部署网站查看

3. 热部署范围配置

1. 默认不触发重启的目录列表

desc

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

desc

4. 关闭热部署

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

desc

2. 配置高级

1. @ConfigurationProperties

使用@ConfigurationProperties为第三方bean绑定属性

desc

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

desc

注意事项@EnableConfigurationProperties与@Component不能同时使用

解除使用@ConfigurationProperties注释警告(有时候会提示配置注解处理器没有配置,添加以下的坐标即可解决)

desc

2. 宽松绑定/松散绑定

@ConfigurationProperties绑定属性支持属性名宽松绑定

desc

注意事项

• 宽松绑定不支持注解@Value引用单个属性的方式

• 绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

3. 常量计量单位绑定

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

desc

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

desc

4. 数据校验

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

desc

2. 对Bean开启校验功能

desc

3. 设置校验规则

desc

3. 测试

1. 加载测试专用属性

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

desc

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

desc

2. 加载测试专用配置

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

desc

3. web环境模拟测试

1. 模拟端口

desc

2. 虚拟请求测试

desc

3. 虚拟请求状态匹配

desc

4. 虚拟请求响应体匹配

desc

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

desc

6. 虚拟请求响应头匹配

desc

4. 数据层回滚测试

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

desc

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

desc

5. 测试用例数据设定

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

desc

4. 数据层解决方案

1. SQL

1. 数据源配置格式

• 格式一

desc

• 格式二

desc

2. 数据源配置

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

desc

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

desc

• 注意:HiKariCP是springboot默认配置的,如果使用另外两个,需要禁用掉HiKariCP

3. 持久化技术

• 内置持久化解决方案——JdbcTemplate

desc

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

desc

3. 内嵌数据库

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

desc

• H2

• 导入H2相关坐标

desc

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

desc

• 操作数据库(创建表)

desc

• 设置访问数据源

desc

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

desc

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

desc

2. NOSQL

1. Redis

desc

• 导入SpringBoot整合Redis坐标

desc

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

desc

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

desc

• 客户端:RedisTemplate

desc

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

desc

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

desc

• 客户端选择:jedis

desc

• 配置客户端

desc

• 配置客户端专用属性

desc

• lettcus与jedis区别

desc

2. Mongodb

desc

• 应用场景

desc

• 安装启动

desc

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

desc

• 基础CURD

desc

• 基础查询

desc

• SpringBoot整合Mongodb

• 导入Mongodb驱动

desc

• 配置客户端

desc

• 客户端读写Mongodb

desc

3. ElasticSearch(ES)

• Elasticsearch是一个分布式全文搜索引擎

desc

• ES下载与安装

desc

• 创建/查询/删除索引

desc

• IK分词器下载:https://github.com/medcl/elasticsearch-analysis-ik/releases

• 创建索引并指定规则

desc

• 文档操作

• 创建文档

desc

• 查询文档

desc

• 条件查询

desc

• 删除文档

desc

• 修改文档(全量修改)

desc

• 修改文档(部分修改)

desc

• 整合ES

• 配置

desc

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

desc

• 客户端

• 初始化

desc

• 改进

desc

• 测试

desc

• 创建索引

desc

• 添加文档

desc

• 批量添加文档

desc

• 按id查询文档

desc

• 按条件查询文档

desc

5. 整合第三方技术

1. 缓存

缓存作用

desc

SpringBoot启用缓存的方式

• 导入缓存技术对应的starter

desc

• 启用缓存

desc

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

desc

SpringBoot提供的缓存方案

desc

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

• 开启验证码

desc

• 业务层接口

desc

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

desc

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

desc

缓存供应商变更:Ehcache

• 加入Ehcache坐标

desc

• 缓存设定为使用Ehcache

desc

• 提供ehcache配置文件ehcache.xml

desc

缓存供应商变更:Redis

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

desc

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

desc

• 设置Redis相关配置

desc

缓存供应商变更:memcached

• 下载memcached地址:https://www.runoob.com/memcached/window-install-memcached.html

• 安装memcached

desc

• 运行memcached

desc

• memcached客户端选择

desc

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

desc

• 配置memcached服务器必要属性

desc

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

desc

• 创建客户端配置类

desc

• 配置memcached属性

desc

desc

缓存供应商变更:jetcache

desc

• 加入jetcache坐标

desc

• 配置远程缓存必要属性

desc

• 配置本地缓存必要属性

desc

• 配置范例

desc

• 配置属性说明

desc

• 开启jetcache注解支持

desc

• 声明缓存对象

desc

• 操作缓存

desc

• 启用方法注解

desc

• 使用方法注解操作缓存

desc

desc

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

desc

• 查看缓存统计报告

desc

缓存供应商变更:j2cache

desc

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

desc

• 配置使用j2cache(application.yml)

desc

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

desc

• 设置使用缓存

desc

desc

2. 任务

SpringBoot整合Quartz

desc

• 导入SpringBoot整合quartz的坐标

desc

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

desc

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

desc

Spring Task

• 开启定时任务功能

desc

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

desc

• 定时任务相关配置

desc

3. 邮件

SpringBoot整合JavaMail

desc

• 导入SpringBoot整合JavaMail的坐标

desc

• 配置JavaMail

desc

• 配置发送信息文本

desc

• 发送邮件

desc

• 附件与HTML文本支持

desc

4. 消息

JMS

desc

AMQP

desc

MQTT

desc

ActiveMQ

• 下载地址安装:解压缩

• 开启服务

desc

• SpringBoot整合ActiveMQ

• 导入SpringBoot整合ActiveMQ坐标

desc

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

desc

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

desc

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

desc

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

desc

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

desc

RabbitMQ

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

desc

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

• 服务

desc

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

desc

• SpringBoot整合RabbitMQ

• 导入SpringBoot整合RabbitMQ坐标

desc

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

desc

• 定义消息队列(direct)

desc

• 生产与消费消息(direct)

desc

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

desc

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

desc

• 定义消息队列(topic)

desc

• 绑定键匹配规则

desc

• 生产与消费消息(topic)

desc

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

desc

RocketMQ

desc

• 命名服务器与broker

desc

• 启动服务

desc

• 测试服务

desc

• Springboot整合RocketMQ

• 导入SpringBoot整合RocketMQ坐标

desc

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

desc

• 生产消息

desc

• 生产异步消息

desc

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

desc

Kafka

desc

• 启动

desc

• topic

desc

• 测试

desc

• springboot整合kafka

• 导入SpringBoot整合Kafka坐标

desc

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

desc

• 生产消息

desc

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

desc

6. 监控

监控的意义

desc

监控的实施方式

desc

可视化监控平台

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

• Admin服务端

desc

• Admin客户端

desc

• Admin服务端配置

desc

• 设置启用Spring-Admin

desc

• Admin客户端配置

desc

• 启动预览图

desc

监控原理

desc

监控端点1

desc

监控端点2

desc

Web程序专用端点

desc

启用指定端点

desc

启用所有端点

desc

暴露端点功能

desc

JMX和web端点差异1

desc

JMX和web端点差异2

desc

自定义监控指标

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

desc

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

desc

为Health端点添加自定义指标

desc

为Metrics端点添加自定义指标

desc

自定义端点

desc

运维实用篇

打包与运行

windows版

SpringBoot项目快速启动

desc

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

desc

可执行jar包目录结构

desc

jar包描述文件(MANIFEST.MF)

desc

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

desc

Linux版

desc

desc

desc

配置高级

临时属性设置

desc

desc

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

desc

编程方式携带参数启动

desc

配置文件分类

1. SpringBoot中4级配置文件

desc

2. 作用:

desc

3. 配置文件分为4种

desc

4. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序

自定义配置文件

通过启动参数加载配置文件(无需书写配置文件扩展名,properties与yml文件格式均支持)

desc

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

desc

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

desc

重要说明

desc

多环境开发

多环境开发(YAML版)

配置信息

desc

新版配置

desc

多配置文件格式

desc

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

• 一

desc

• 二

desc

• 二

desc

• 注意事项:当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

多环境开发(Properties版)

多配置文件格式

desc

properties文件多环境配置仅支持多文件格式

多环境开发控制

Maven与SpringBoot多环境兼容

• 1. Maven中设置多环境属性

desc

• 2. SpringBoot中引用Maven属性

desc

• 3. 执行Maven打包指令,并在生成的boot打包文件.jar文件中查看对应信息

4. 日志

1. 日志基础

日志作用

desc

添加日志记录操作

desc

日志级别

desc

设置日志输出级别

desc

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

desc

使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作

2. 日志输出格式控制

设置日志输出格

desc

3. 日志文件

设置日志文件

desc

日志文件详细配置

desc

原理篇

自动配置

bean的加载方式

1. XML方式声明bean

desc

2. XML+注解方式声明bean

desc

• 其他注解方式

desc

3. 注解方式声明配置类

desc

• 扩展1

desc

• 扩展2

desc

• 扩展3

desc

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

desc

• 扩展4

desc

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

desc

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

desc

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

desc

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

desc

bean的加载控制

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

desc

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

desc

使用@Conditional注解的派生注解设置各种组合条件控制bean的加载

• 匹配指定类

desc

• 未匹配指定类

desc

• 匹配指定类型的bean

desc

• 匹配指定名称的bean

desc

• 匹配指定环境

desc

bean依赖属性配置

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

desc

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

desc

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

desc

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

desc

自动配置原理

desc

变更自动配置

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

desc

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

desc

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

desc

自定义starter

案例:统计独立IP访问次数

需求分析

desc

自定义starter

业务功能开发

desc

自动配置类

desc

配置

desc

模拟调用(非最终版)

desc

开启定时任务功能

desc

设置定时任务

desc

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

desc

设置加载Properties类为bean

desc

根据配置切换设置

desc

明细模式报表模板

desc

极简模式报表模板

desc

配置信息

desc

自定义bean名称

desc

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

desc

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

desc

自定义拦截器

desc

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

desc

辅助功能开发

导入配置处理器坐标

desc

进行自定义提示功能开发

desc

核心原理

SpringBoot启动流程

desc

监听器类型

desc

Spring程序与SpringBoot程序对比

desc

-------------本文结束感谢您的阅读-------------