基础篇
快速入门
快速上手
使用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
• 匹配指定环境