微服务阶段
注意:部分图片截图还未更新上传,待续
Javase
Mysql
Html+css+js+jquery
Javaweb
Ssm
War:tomcat运行
Spring 再简化:springboot-jar:
该怎么学:
六天
Springboot:(6天)
1、 认识
2、 配置如何编写yaml
3、 自动装配原理:重要、谈资
4、 集成web开发:业务的核心
5、 集成数据库 Druid
6、 分布式开发:Dubbo(RPC)+zookeeper
7、 Swagger:接口文档
8、 任务调度:
9、 SpringSecurity:shiro
穿插Linux:(两天)
部署需要
Jvm:(两天)
Spring cloud:(两天半)
1、 微服务
2、 Spring cloud入门
3、 Restful(接口风格)
4、 Eureka
5、 Ribbon
6、 Feign
7、 HyStrix
8、 zuul路由网关
9、 spring cloud config:git
新服务架构:服务网格:
老师 领导 项目经理:
如何学习新东西 如何持续学习 如何关注这个行业
来龙去脉、历史,理论;谈资
30岁 经理
Maven、spring、springmvc、spring boot
Spring boot整合了所有框架、maven整合了所有jar包
程序=数据结构+算法;程序猿
程序=面向对象+框架;码农
微服务架构
MVC三层架构 MVVM 微服务架构
业务:service:userService:==》模块
Springmvc,controller==》
单体应用结构
微服务架构:根据服务器的压力自动分配
高内聚 低耦合
如何构建微服务
面试最主要的你主导面试官,面试官主导你的话
软实力:聊天 举止 谈吐 见解
**
**
第一个springboot程序
环境:
jdk1.8
maven3.6.1
springboot最新版
idea
官方提供了体格快速生成网站,IDEA继承了这个网站
1、 可以在官网直接下载后,导入idea开发(官网在哪)
2、 直接使用idea创建一个springboot项目(一般直接在idea直接开发)
在IDEA直接创建springboot项目:
New project,其中的命名习惯为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDcDMsCt-1602463564594)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010152823598.png)]
1、启动类必须与程序在同一包下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PoyKS0G-1602463564598)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010152835475.png)]
3、 spplication.properties为配置文件#springboot的配置文件 核心配置文件
4、 test为单元测试
5、 右侧有maven的快捷键 可以打jar包、
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4d5JXeq6-1602463564599)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010152918189.png)]
6、 打完jar包,在jar所在路径可以运行,打开命令行输入:
java -jar .\demo-0.0.1-SNAPSHOT.jar
注意此时idea的服务需要关闭,否则提示端口占用,服务启动失败。
7、 多个微服务需要修改端口号:在properties里边添加server.port=8081即可
8、 修改启动彩蛋:banner.txt
https://www.bootschool.net/ascii-art/chinese?pageNO=3
9、
**
**
原理初探
Pom.xml
启动器
org.springframework.boot spring-boot-starter-web启动器:就是springboot的启动场景
比如spring-boot-stater-web就是启动web
Springboot所有的应用场景都变为
主程序
//标注这个类是一个springboot的应用
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
@SpringBootConfiguration springboot配置
@EnableAutoConfiguration 自动配置
@Import(AutoConfigurationImportSelector.class)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXlbXcoq-1602463564602)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010152937221.png)]
所有的资源加载在配置我呢见中
自动装配的原理:
结论:Springboot 所有的自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功。
1、 Springboot在启动时在类路径下/META-INF/spring.factories获取指定的值
2、 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动装配
3、 以前我们需要自动配置的东西,现在springboot帮我们做了
4、 整合JavaEE,解决方案和自动配置的东西都在sprig-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
5、 它会把所有需要导入的组件,以类名的方式返回,这些组件就会返回值到容器。
6、 容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类容器中导入了这个场景需要的所有组件;并自动装配,@Configuration,JavaConfig!
7、 有了自动配置类,免去了我们手动编写配置文件的工作
SpringApplication这个类主要做了以下四件事情:
1、推断应用的类型是普通的项目还是Web项目
2、查找并加载所有可用初始化器 , 设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
关于springboot,谈谈你的理解:
自动装配
Run()
自动装配就是可以全面接管springmvc的配置。
Springboot配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ZzQfjuV-1602463564605)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010152952923.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O54XmU0p-1602463564607)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153001276.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHbiaeQ8-1602463564609)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153009277.png)]
Yaml可以直接给实体类赋值
以前的方法:
一般使用pojo类中的alt+insert快捷键直接构造方法
定义私有属性后,可以用@Value直接给对象赋值,
在取值的类中,@Autowired下边直接定义属性获取这个值,然后在该类的方法中直接获取这个值测试一下
实例化也可以
@Component 注册bean
Yaml****赋值:
在实体类上边加@ConfigurationProperties(prefix = “persion”)
这个配置产生提示,红色的,如果不配置使用了这个注解就会提示报红
**@ConfigurationProperties的作用:**可运用在需要配置的类上,不止是实体类,比如:全局配置,
将配置文件每一个属性的值,映射到这个组件中;告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定,参数prefix = “person” ;将配置文件中的person下面的所有属性一一对应。
注意yaml中的值一点更要写对,字母顺序检查别反了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBHn3hza-1602463564612)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153028887.png)]
//加载指定的配置文件
@PropertySource(value = “classpath:wangbo.properties”)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wsdKdstb-1602463564614)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153039450.png)]
Yaml有松散绑定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F1u47kvT-1602463564617)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153047596.png)]
Jsr303校验:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTLVhhNF-1602463564619)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153056283.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyogMbfK-1602463564620)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153108344.png)]
Yaml文件优先级:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvEDW2q4-1602463564622)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153116752.png)]
#springboot的多环境配置:可以选择激活哪一个配置文件
spring.profiles.active=test
这时需要多个文件
使用yaml时,只需要一个文件:spring:profiles选择哪个生效,比如:让就使用spring: profiles: active:dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDxKs9Jd-1602463564623)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153128101.png)]
配置文件到底能写什么?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JAA1vH5h-1602463564625)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153141463.png)]
启动类自动装配的原理:重要的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOpVTO76-1602463564627)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153150404.png)]
**
**
Spring Boot Web开发
JAR:webapp!
自动装配
Springboot帮我们配置了什么?我们能不能进行修改?能修改那些东西?能不能拓展?
xxxAutoConfiguration向容器中自动装配组件
xxxProperties:自动配置类,
1、 创建应用,选择模块、
要解决的问题:
导入静态资源
首页
Jsp,模板引擎Thymeleaf
装配扩展SpringMVC ※
增删改查
拦截器
国际化
静态资源:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wONOsUbC-1602463564629)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153220613.png)]
优先级:Resource>ststic>public
一般public放公共资源,static放静态文件和首页,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkYGj3TO-1602463564630)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153214686.png)]
总结:
1、 在springboot中可以使用以下方式来处理静态资源:
(1) Webjars localhost:8080/webjars/
(2) public,Static,/**,resources localhost:8080/
2、 优先级:resources大于static(默认)大于public
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zwyOSYEW-1602463564632)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153230648.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Vt52ned-1602463564633)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153239937.png)]
都在这个类里
首页如何定制
源码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZ9lpkGk-1602463564634)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153251904.png)]
找依赖文档 去github上去找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNdY0VlR-1602463564635)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153304570.png)]
模板引擎:
结论:只要需要使用thymeleaf。只需要导入对应的依赖就可以了,我们将html放在我们的templates下即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPAEnz1y-1602463564636)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153315144.png)]
Thymeleaf语法:
Th可以接收所有的html标签
例如:text是原文,utextU是转义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RZfUdGEj-1602463564638)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153323983.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hotl1pLJ-1602463564639)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153331631.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V4HajrIP-1602463564641)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153345936.png)]
在springboot中,有非常多的xxxConfiguration帮助我们进行扩展配置,只要看见了这个东西哦,我们就要注意了
一、首页配置:
1、 所有页面的静态资源都需要使用thymeleaf来接管;
2、 url:@{}
二、页面国际化,注意点:
1、 沃尔玛呢需要配置i18n文件
2、 如果我们需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver
3、 记得将自己写的组件配置到spring容器@Bean中
4、 #{}
三、登录+拦截器
四、增删改查
这的路径一定要写对:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riVQLuwA-1602463564642)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153358363.png)]
这的抽取很方便
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cnd9lIGH-1602463564643)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153409150.png)]
四、员工列表展示
1、提取公共页面
(1)th:fragment=“sidebar”
(2)
(3)如果要传递参数,可以直接使用括号传参,接收判断即可
2、列表循环展示
五、添加员工
1、按钮提交
2、跳转到添加页面
3、添加员工成功
4、返回首页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qbteluza-1602463564645)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153419147.png)]
5、 CRUD
6、 404
**
**
如何写一个网站
前端:
模板:别人写好的,我们拿来自己改
框架:组件:自己手动组合拼接! Bootstrap,Layui,semantic-ui
格栅系统
导航栏
侧边栏
表单
1、 前端搞定:页面长什么样子:数据
2、 设计数据库:
3、 前端让他能够自动运行,独立化工程
4、 数据接口如何对接:json,对象 all in one!
5、 前后端联调测试!
如何搭建一套网站:
1、 有一套自己熟悉的后台模板:工作必要!x-admin
2、 前端界面:至少自己能够通过前端框架组合出来一个网站页面
-index
-about
-blog
-post
-user
3、让这个网站能够独立运行!
4、一个月时间
**
**
上周回顾
1、 springboot是什么?
2、 微服务
3、 写出第一个heloword程序
4、 探究源码~自动装配的源码 多回看
5、 配置yaml
6、 多文档环境切换
7、 静态资源映射
8、 Thymeleaf th:xxx
9、 Springboot 如何拓展MVC javaconfig
10、 如何修改springboot的默认配置~ properties
11、 CRUD
12、 国际化
13、 拦截器
14、 定制首页,错误页
这周:
1、 JDBC
2、 Mybatis:重点
3、 Druid: 重点 德鲁伊
4、 Shiro:安全:重点
5、 Spring Security:安全:重点
6、 异步任务~,邮件发送,定时任务()
7、 Swagger
8、 Dubbo+Zookeeper
Data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdcIMrLx-1602463564646)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153439391.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5UgoH0P-1602463564648)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153449543.png)]
Druid:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPu2gQ3e-1602463564648)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153457992.png)]
Filter
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ykGyrxAr-1602463564650)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153512128.png)]
**
**
Mybatis
整合包
1、 mybatis-spring-boot-starter
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMJqIY2S-1602463564651)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153521406.png)]
自己总结:
1、 配置文件先整合mybatis
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zgGFIemx-1602463564653)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153530429.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y9FIogGJ-1602463564654)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153604374.png)]
2、 写pojo,有参无参注解
3、 Mapper接口,增删改查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5LWhnfk-1602463564656)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153613715.png)]
4、 Xml文件,每个方法的的数据库 语句
5、 Controller层,调用增删改查方法,返回结果给前台 先引入mapper.Mapper就可以用其中的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQZnYb3n-1602463564657)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153623740.png)]
6、 运行,测试。
老师总结
M:数据和业务
V:交接
C:HTML
1、 导入包
2、 配置文件
3、 Mybatis配置
4、 编写sql
5、 service层调用dao层
6、 controller层调用service层
SpringSecurity(安全)
再web开发中,安全第一位,过滤器,拦截器
功能性需求:否
做网站:安全应该在什么时候考虑?设计之初
漏洞,隐私泄露
架构一旦确定
Shiro springsecurity:很像,除了类名,名字不一样
认证,授权(vip1,vip2,VIP3)
功能权限
访问介绍
菜单权限
拦截器、过滤器、大浪的原生代码~ 冗余
注销及权限控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KoLsOC9A-1602463564659)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153646283.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwvGKaF9-1602463564659)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153652580.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RlvOIHf-1602463564660)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153659058.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nk3t3pEf-1602463564661)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153707968.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBMoE894-1602463564663)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153715586.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pd0WqldD-1602463564664)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153723503.png)]
**
**
用户认证和授权
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jFnCALnr-1602463564665)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153734002.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O15rREYp-1602463564666)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153741330.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAQmMYFv-1602463564667)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153752110.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfXU1yVK-1602463564669)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153758827.png)]
**
**
Shiro
1、 导入依赖
2、 配置文件
3、 Helloword
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxOi2N0P-1602463564670)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153810221.png)]
Shiro实现登录拦截
Shiro实现用户认证
Shiro整合mybatis
Shiro请求授权实现
Shiro整合thymeleaf
使用@bean将其放入spring里
Springboot008笔记:
先引入依赖
配置mybatis
写pojo
写mapper 接口,
写mapper xml
写service
**
**
Swagger
学习目标:
了解swagger的作用和概念
了解前后端分离
在springboot中集成swagger
Swagger简介
前后端分离
Vue+SpringBoot
后端时代:前端只用管理静态页面;html=>后端。模板引擎jsp=>后端是主力
前后端分离时代:
后端:后端控制层,服务层,数据访问层【后端团队】
前端:前端控制层,视图层【前端团队】
伪造后端数据,json,已经存在了,不需要后端,前端工程依旧能够跑起来
前后端如何交互?–àAPI
前后端相对独立,松耦合;
前后端甚至可以部署在不同的服务器上;
产生一个问题:
前后端集成联调,前端人员和后端人员无法做到“及时协商,尽早解决”,最终导致问题集中爆发。
解决方案:
1、 首先指定一个schema【计划的提纲】,实时更新最新API,降低集成的风险
2、 早些年:指定word计划文档;
3、 前后端分离:
(1) 前端测试后端接口:postman
(2) 后端提供接口,需要实时更新最新的消息及改动!
Swagger
号称世界上最流行的api框架
Restful api 文档在线自动生成工具->api文档与api定义同步更新
直接运行,可以在线测试API接口
支持多种语言:java、php…
官网:https://swagger.io/
在项目中使用Swagger需要springbox;
Swagger2
Ui
Springboot集成swagger
1、 新建一个springboot-web项目
2、 导入相关依赖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QEVos0I-1602463564672)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153824624.png)]
3、 编写一个hello工程
4、 配置swagger==》Config
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TH2zq5G-1602463564672)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153831618.png)]
5、测试运行:http://localhost:8080/swagger-ui.html
配置swagger信息
Swagger的bean实例Docket;
Swagger配置扫描接口
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage指定要扫描的包 .basePackage(“com.wang.swagger.controller”)
//any() :扫描全部
//none(); 都不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解 .withMethodAnnotation(GetMapping.class)
.apis(RequestHandlerSelectors.basePackage(“com.wang.swagger.controller”))
//过滤什么路径
.paths(PathSelectors.ant("/wang/**"))
.build();
}
配置是否启动swagger
enable是否启用swagger,如果为false,则swagger不能在浏览器中访问
只希望swagger在生产的时候使用,在发布的时候不使用?
答:1、判断是否为生产环境 flag=false
2、注入enable(flag)
//配置了swagger的Docket的bean实例
//enable是否启用swagger,如果为false,则swagger不能在浏览器中访问
@Bean
public Docket docket(Environment environment){
//设置要显示的swagger环境
Profiles profiles=Profiles.of(“dev”,“test”);
//获取项目的环境,通过environment.acceptsProfiles判断是否处在自己设定的环境当中。
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)//enable是否启动swagger,如果为false,则swagger不能在浏览器中访问
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage指定要扫描的包 .basePackage(“com.wang.swagger.controller”)
//any() :扫描全部
//none(); 都不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解 .withMethodAnnotation(GetMapping.class)
.apis(RequestHandlerSelectors.basePackage(“com.wang.swagger.controller”))
//过滤什么路径
//.paths(PathSelectors.ant("/wang/**"))
.build();
}
如何配置API文档的分组:
.groupName(“王博”)
如何配置多个分组
多个Docket实例即可
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName(“A”);
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName(“B”);
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName(“C”);
}
实体类配置:
package com.wang.swagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api(注释)
@ApiModel(“用户实体类”)
public class User {
@ApiModelProperty(“用户名”)
public String username;
@ApiModelProperty(“密码”)
public String password;
}
controller
package com.wang.swagger.controller;
import com.wang.swagger.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(“hello控制类”)
@RestController
public class HelloController {
@GetMapping(value = “/hello”)
public String hello(){
return “hello”;
}
//只要我们的接口中,返回值中存在实体类,它就会被扫描到swagger中
@PostMapping(value = “/user”)
public User user(){
return new User();
}
//Operation接口,不是放在类上,而是放在方法上
@ApiOperation(“Hello控制类”)
@GetMapping(value = “/hello2”)
public String hello2(@ApiParam(“用户名”) String username){
return “hello”+username;
}
@ApiOperation(“post测试”)
@PostMapping(value = “/postt”)
public User hello2(@ApiParam(“用户名”) User user){
int i = 5/0;
return user;
}
}
总结:
1、 可以通过swagger给一些比较难理解的属性或者接口,增加注释信息
2、 接口文档实时更新
3、 可以在线测试
Swagger****是一个优秀的工具,几乎所有大公司都有使用它。
注意点:
正式发布的时候,关闭swagger!!!出于安全考虑,而且节省运行内存。
**
**
任务
异步任务~
定时任务~
邮件发送~
异步任务:
实现:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLPKprah-1602463564674)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153937827.png)]
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
//告诉spring这是一个异步的方法
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“数据正在处理。。。”);
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
@RequestMapping("/hello")
public String hello(){
asyncService.hello();//停止三秒
return “ok”;
}
}
主方法
package com.wang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
//开启异步注解功能
@EnableAsync
@SpringBootApplication
public class Springboot009TestApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot009TestApplication.class, args);
}
}
邮件任务:
Rawsezwnzxfvbdga zipygnchtlkebdaj
@Test
void contextLoads2() throws MessagingException {
//一个复杂的邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
//组装
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//正文
helper.setSubject(“你好呀”);
helper.setText(“
谢谢你的爱
”,true);//附件
helper.addAttachment(“1.jpg”,new File(“C:\Users\DELL\Desktop\1.jpg”));
helper.addAttachment(“2.jpg”,new File(“C:\Users\DELL\Desktop\1.jpg”));
helper.setTo(“981341916@qq.com”);
helper.setFrom(“981341916@qq.com”);
mailSender.send(mimeMessage);
}
定时任务
TaskScheduler 任务调度程序
TaskExecutor 任务执行者
@EnableScheduling//开启定时功能的注解
@Scheduled //什么时候执行
Springboot整合redis
Springboot操作数据:spring-data jpa jdbc mongdb redis!
springData业时和Springboot齐名的项目
说明:在springboot2.x之后,原来使用的jedis被替换为lettuce
Jedis:采用的是直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedis pool连接池,更像BIO模式
Lettuce:采用netty,实例可以在多个实例中共享,不存线程不安全的情况!可以减少线程数量,更像NIO模式。
源码分析:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGfOyb6z-1602463564675)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010153957316.png)]
整合测试一下:
1、 导入依赖
org.springframework.boot spring-boot-starter-data-redis2、 配置连接
spring.redis.host=127.0.0.1
spring.redis.port=6379
3、 测试
4、@SpringBootTest
class Redis02SpringbootApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//redisTemplate 操作不同的数据类型,api和我们的指令是一样的
// opsForValue操作字符串,类似string
// opsForList 操作list 类似list
//opsForSet
//opsForHash
//opsForGeo
//opsForHyperLogLog
//除了基本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务,和基本的CRUD
redisTemplate.opsForValue().set("mykey","kuangshengshuo");
System.*out*.println(redisTemplate.opsForValue().get("mykey"));
}
}
**
**
编写一个自己的RedisTemplate:
这是我给大家写的一个固定模板,大家在企业中拿去就可以直接使用
package com.wang.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.StringRedisConnection;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.net.UnknownHostException;
public class RedisConfig {
//这是我给大家写的一个固定模板,大家在企业中拿去就可以直接使用
//自己定义了一个RedisTemplate
@Bean(name = “redisTemplate”)
@SuppressWarnings(“all”)
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
//为了自己开发方便,一般直接使用<String, Object>
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
//序列化配置,用jackson解析任意对象Object.class
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//使用ObjectMapper转义
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//string的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
所有的redis操作,其实对于java开发人员来说,十分的简单,更重要的是要去理解redis的思想和一种数据结构的用处和作用场景。
企业中一般使用自己写的redistemplate,直接使用redisUtils。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8M7xYUs-1602463564677)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010170126764.png)]
分布式理论
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJi2EEtf-1602463564677)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010170137150.png)]
分布式Dubbo+Zookeeper+SpringBoot
RPC两个核心模块:通讯、序列化
序列化:数据传输需要转换
Netty:30天
HTTP SpringCloud:生态
http:无状态协议 负责通信
Dubbo:18年重启 Dubbo3.x RPC 有时候报错可能是没有网络
**
**
Dubbo及Zookeeper安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkNCSgZq-1602463564679)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010170147699.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XadWRWrK-1602463564680)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010170156130.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2lwBsGy-1602463564681)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201010170204677.png)]
前台 中台 后台
Zookeeper:hadoop hive
Zookeeper:注册中心
不是必须:Dubbo-admin是一个监控管理后台-查看我们注册了哪些服务,哪些服务被消费了~
Dubbo:jar包
服务器注册发现步骤:
前提:zookeeper服务已开启
1、 提供者提供服务
(1) 导入依赖
(2) 配置注册中心的地址,以及服务发现名,和要扫描的包
(3) 在想要被注册的服务上面,增加一个注解@Service
2、 消费者如何消费
(1) 导入依赖
(2) 配置注册中心的地址,配置自己的服务名
(3) 从远程注入服务 @Reference
聊聊现在和未来:
随着公司体系越来越大,用户越来越多!
微服务架构-新架构
模块化,功能化!
用户,支付,签到,娱乐,。。。
人多余多:一台服务器解决不了;再增加服务器! 横向
假设A服务器占用98%资源,B服务器只占用了10%。----负载均衡
将原来的整体项目,分成模块化,用户就是一个单独的项目,签到也是一个单独的项目,项目和项目之间需要通信,如何通信?
用户非常多,而签到十分少!给用户多一点服务器,给签到少一点服务器!
微服务架构问题?
分布式架构会遇到的四个核心问题?
1、 这么多服务,客户端该如何去访问?
2、 这么多服务,服务之间如何进行通信?
3、 这么多服务,如何治理?
4、 服务挂了,怎么办?
解决方案
SpringCloud,是一套生态,就是来解决以上分布式架构的四个问题。
想使用SpringCloud,必须掌握SpringBoot,因为SpringCloud是基于SpringBoot;
目前,又提出了一套解决方案:
服务网格:下一代微服务标准,Server Mesh
代表解决方案:istio(未来可能需要掌握)
万变不离其宗,一通百通!
1、 API网关,服务路由
2、 HTTP,RPC框架,异步调用
3、 服务注册与发现,高可用
4、 熔断机制,服务降级
如果,你们基于这四个问题,开发一套解决方案,也叫SpringCloud!
分布式理论
[外链图片转存中…(img-gJi2EEtf-1602463564677)]
分布式Dubbo+Zookeeper+SpringBoot
RPC两个核心模块:通讯、序列化
序列化:数据传输需要转换
Netty:30天
HTTP SpringCloud:生态
http:无状态协议 负责通信
Dubbo:18年重启 Dubbo3.x RPC 有时候报错可能是没有网络
**
**
Dubbo及Zookeeper安装
[外链图片转存中…(img-mkNCSgZq-1602463564679)]
[外链图片转存中…(img-XadWRWrK-1602463564680)]
[外链图片转存中…(img-G2lwBsGy-1602463564681)]
前台 中台 后台
Zookeeper:hadoop hive
Zookeeper:注册中心
不是必须:Dubbo-admin是一个监控管理后台-查看我们注册了哪些服务,哪些服务被消费了~
Dubbo:jar包
服务器注册发现步骤:
前提:zookeeper服务已开启
1、 提供者提供服务
(1) 导入依赖
(2) 配置注册中心的地址,以及服务发现名,和要扫描的包
(3) 在想要被注册的服务上面,增加一个注解@Service
2、 消费者如何消费
(1) 导入依赖
(2) 配置注册中心的地址,配置自己的服务名
(3) 从远程注入服务 @Reference
聊聊现在和未来:
随着公司体系越来越大,用户越来越多!
微服务架构-新架构
模块化,功能化!
用户,支付,签到,娱乐,。。。
人多余多:一台服务器解决不了;再增加服务器! 横向
假设A服务器占用98%资源,B服务器只占用了10%。----负载均衡
将原来的整体项目,分成模块化,用户就是一个单独的项目,签到也是一个单独的项目,项目和项目之间需要通信,如何通信?
用户非常多,而签到十分少!给用户多一点服务器,给签到少一点服务器!
微服务架构问题?
分布式架构会遇到的四个核心问题?
1、 这么多服务,客户端该如何去访问?
2、 这么多服务,服务之间如何进行通信?
3、 这么多服务,如何治理?
4、 服务挂了,怎么办?
解决方案
SpringCloud,是一套生态,就是来解决以上分布式架构的四个问题。
想使用SpringCloud,必须掌握SpringBoot,因为SpringCloud是基于SpringBoot;
目前,又提出了一套解决方案:
服务网格:下一代微服务标准,Server Mesh
代表解决方案:istio(未来可能需要掌握)
万变不离其宗,一通百通!
1、 API网关,服务路由
2、 HTTP,RPC框架,异步调用
3、 服务注册与发现,高可用
4、 熔断机制,服务降级
如果,你们基于这四个问题,开发一套解决方案,也叫SpringCloud!
为什么要解决这个问题? 本质:网络是不可靠的!