网盘链接:https://pan.baidu.com/s/1z8I4IXEuYBepDYbg4ijzUw
提取码:1234
1. 基础篇
1.快速上手SpringBoot
1.SpringBoot入门程序开发
隐藏指定文件/文件夹
2.浅谈入门程序工作原理
parent
starter
引导类
springboot内置三款服务器
2.Rest风格
@RequestBody @RequestParam @PathVariable
@RestController = @Controller + @ResponseBody
RESTful快速开发
3.基础配置
复制工程时,模板module文件样式:
属性配置方式:
4.Yaml
yaml数据读取
@Value(“${一级属性名.二级属性名}”)
封装整个yaml文件中的属性
//使用自动装配将所有的数据封装到一个对象Environment中
@Autowired
private Environment env;
// 使用方式
System.out.println("-----------------------------");
System.out.println(env.getProperty("server.port"));
System.out.println(env.getProperty("user.name"));
封装yaml文件中的单个对象
//1.定义数据模型封装yaml文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
}
// 省略 toString()、setXxx()、getXxx()
//使用
@Autowired
private MyDataSource myDataSource;
注意yml文件中的数字信息,eg:
0127 会被当做八进制数 转换为 十进制的 87
.
5.整合第三方技术
整合JUint
整合MyBatis
- MySQL 8.X驱动强制要求设置时区
- 修改url,添加serverTimezone设定
- 修改MySQL数据库配置
- 驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver
整合MyBatis-Plus
MyBatis-Plus是中国人开发的
使用改框架可以节省Dao接口的编写,直接让接口继承
BaseMapper<>
整合Druid
6.基于SpringBoot的SSMP整合案例
使用Lombok简化POJO开发
- 导入lombok
- @Data注解
数据层开发
分页功能
需要用拦截器实现
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
业务层开发
表现层开发
表现层数据一致性
前后端协议联调
业务消息一致性处理
总结
2. 运维实用篇
端口冲突
使用命令行杀死进程
临时属性设置
- 带属性数启动SpringBoot
java -jar springboot
–server.port=8080
- 携带多个属性启动SpringBoot,属性使用空格分隔
1. 配置文件的等级
2. 自定义配置文件
-
在idea中设置启动参数Program arguments : –spring.config.name=
+配置文件名称
-
在idea中设置Program arguments : –spring.config.location=
classpath:/ebank.yml
- Program arguments 中可以写多个配置信息,用 “,” 隔开
多环境开发
1.同一个文件内用 —分隔开
# 应用环境
spring:
profiles:
active: pro
# 设置环境
# 生产环境
---
spring:
config:
activate:
on-profile: pro
server:
port: 80
---
# 开发环境
spring:
config:
activate:
on-profile: dev
server:
port: 81
---
# 测试环境
spring:
config:
activate:
on-profile: test
server:
port: 82
- 多个环境文件
yml文件和properties文件操作方式相同
spring:
profiles:
active: dev
inclue:
#现在用group
group:
"dev": devDB,devMVC
"pro": proDB,proMVC
include: 中的文件先加载最后加载 dev
group: 先加载dev,最后加载devMVC
日志
日志基础
-
日志作用
- 日志(log)作用
-
运营记录信息
- 记录日常运营重要信息(峰值流量、平均响应时长…)
- 记录应用报错信息(错误堆栈)
- 记录运维过程数据(扩容、宕机、报警…)
日志级别
日志输出格式控制
- 设置日志输出格式
日志文件
3. 实用开发篇
热部署
重启
ctrl+alt+shift+/
默认不触发重启的目录列表
关闭热部署功能
配置高级
@ConfigurationProperties
在使用了@EnableConfigurationProperties()后需要关闭@Component
宽松绑定/松散绑定
宽松绑定不支持注解@Value引用单个属性的方式
prefix 中用小写字符
常用计量单位绑定
数据校验
测试
1. 加载测试专用属性
2. 加载测试专用配置
3.Web环境模拟测试
Json
4.数据层测试回滚
避免测试的数据影响数据库
5.测试用例数据设定
随机测试数据
4. 数据层解决方案
1.SQL
现有数据层解决方案技术选型
Druid + MyBatis-Plus + MySQL
- 数据源: DruidDataSource
- 持久化技术: MyBatis-Plus / MyBatis
- 数据库: MySQL
数据源:
应用场景:
内置持久化解决方案—jdbcTemplate
@SpringBootTest
class Springboot15SqlApplicationTests{
@Test
void testJdbcTemplate(@Autowired JdbcTemplate jdbcTemplate){
String sql = "select * from tbl_book";
RowMapper<Book> rm = new RowMapper<Book>() {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book temp = new Book();
temp.setId(rs.getInt("id"));
temp.setName(rs.getString("name"));
temp.setType(rs.getString("type"));
temp.setDescription(rs.getString("description"));
return temp;
}
};
List<Book> list = jdbcTemplate.query(sql, rm);
System.out.println(list);
}
}
需要导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
yml中的jdbcTemplate配置
内嵌数据库
H2数据库:线上运行时请务必关闭
2.NoSQL
主流NoSQL
redis (key-value存储结构)
启动Windows端redis时,一个小bug的解决方式
redis整合流程
- 导入redis坐标
- 配置redis
- RedisTemplate的API
- 实例
RedisTemplate是以对象为基本操作单元
StringRedisTemplate以字符串为基本操作单元
连接Redis服务器的方式
- lettcus (springboot 默认)
- jedis
Mongodb 结构化数据
应用场景:
Mongodb数据库下载
阉割版操作系统可能出现的问题
Mongodb可视化客户端 Robo 3T
ES(Elasticsearch)
Elasticsearch是一个分布式全文搜索引擎
all是虚拟字段,内容由name和description内容组成.
{
"mappings":{
"properties":{
"id":{
"type":"keyword"
// 用indext来设置是否用于查询
// "index":true
},
"name":{
// 设置参与配置的字段
"type":"text",
"analyzer":"ik_max_word",
"copy_to":"all"
},
"type":{
"type":"keyword"
},
"description":{
// 设置参与配置的字段
"type":"text",
"analyzer":"ik_max_word",
"copy_to":"all"
},
"all":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
用put请求修改数据,需要把只改一个字段数据时,更新后的该数据只保留一个字段,其他字段数据删除
用update请求更改数据,只改一个字段数据时,其他字段数据不会改动
es整合
:
其中使用了fastjson 依赖
5.整合第三方技术
1. 缓存
配置中添加 spring.cache.type=simple
1.Ehcache
2.Redis
3.memcached
springboot没有整合memcacahed,所以需要自己定义版本号和提供属性
整合流程
4.jetcache
整合流程
5.j2cache
j2cache-spring-boot2-starter 中包含有redis
2.任务
1.Quartz
定义任务
2.spring task
3.邮件
3个邮件相关协议
4.消息
1.消息概念与作用
2.JMS
一个规范,与JDBC相同
3.AMQP
4.MQTT
5.Kafka简介
ActiveMQ
下载地址
启动服务
整合流程
RabbitMQ
建议使用Chrome访问,edge打不开
direct exchange 整合流程
两个listener轮询处理
topic exchange 整合流程
RocketMQ
启动RocketMQ
整合流程
Kafka
整合流程
6.监控
1. 监控的意义
监控的意义
监控的方式
2.可视化监控平台
二者简化
配置通过web端读取监控信息
adming服务端一定要做成一个web项目把功能开放出来,这样才能监控到这个应用
3.监控原理
management:
endpoint:
health:
show-details: always
info:
enable: false
endpoints:
web:
exposure:
# 端点功能暴露
include: "*"
# 端点功能开启与关闭
enabled-by-default: true
4.自定义监控指标
为Metrics端头添加自定义指标
4.原理篇
1.自动配置
1.bean的加载方式
加载方式一:
加载方式二:
指定加载bean的位置, @component, @configuration
实现对bean加载到容器之前的批处理操作
加载配置类并加载配置文件
@import导入的bean,在容器中的名称为全路径名称
2.bean的加载控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYL1IHZL-1654171453493)(https://typora—pic.oss-cn-hangzhou.aliyuncs.com/img/image-20220530004320491.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aI70pvpB-1654171453495)(https://typora—pic.oss-cn-hangzhou.aliyuncs.com/img/image-20220530004413927.png)]
小结:
3.bean依赖属性
4.自动配置原理
5.变更自动配置
2.自定义starter
1.案例:统计独立IP访问次数
2.自定义starter
判断key是否存在
采用@Import注解 生成bean, 因为@configurationproperties生成的bean名称与EL表达式冲突
3.辅助功能开发
3.核心原理
1.SpringBoot启动流程
2.容器类型选择
3.监听器