微服务阶段

注意:部分图片截图还未更新上传,待续

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-redis

2、 配置连接

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操作,比如事务,和基本的CRUDredisTemplate.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!

为什么要解决这个问题? 本质:网络是不可靠的!

springboot学习相关推荐

  1. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...

  2. SpringBoot学习笔记(3):静态资源处理

    SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...

  3. 目录:SpringBoot学习目录

    SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...

  4. springboot学习笔记(五)

    一丶注值方式 1.在application.properties文件中注值 首先我们将application.yml中的学生名字和年龄给注释掉,来验证在applic.properties的注值方式. ...

  5. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  6. SpringBoot学习笔记(16):单元测试

    SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...

  7. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  8. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  9. SpringBoot学习笔记(8):事物处理

    SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...

  10. SpringBoot 学习二:操作数据库

    2019独角兽企业重金招聘Python工程师标准>>> 本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 Jdbc ...

最新文章

  1. 跳一跳python源码_使用Python实现跳一跳自动跳跃功能
  2. keras从入门到放弃(十七)使用预训练网络VGG迁移学习
  3. Android 系统添加SELinux权限
  4. 算法--背包九讲(详细讲解+代码)
  5. 【Spring】Spring 中的bean 和我们java中的bean有什么区别以及spring 模拟实现
  6. ddmmyy日期格式是多少_DDMMYY什么意思?
  7. templates是什么意思_什么?噪音可以用来降温做冰箱?
  8. Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
  9. 政府信息化与电子政务
  10. 【19】蓝桥杯之奇妙的数字(填空题)
  11. Qt 动态加载.qrc文件
  12. python函数之任意数量的实参
  13. Google 为什么选择 Jetty,放弃 Tomcat
  14. mbp touchbar设置_macbookpro touchbar 怎么添加锁屏快捷键
  15. 盘点3大智能家居系统|苹果HomeKit、亚马逊Alexa、谷歌Home?
  16. 统计学知识大梳理(附框架图公式)
  17. base64加密原理详解
  18. python基础-廖雪峰
  19. 题解 P5265 【模板】多项式反三角函数
  20. Vue3在当前h5界面禁用移动端物理返回键代码

热门文章

  1. 【机器学习】线性回归与逻辑回归的理论与实战
  2. 前端网页打印插件print.js
  3. hive时金额为科学记数法转为普通的数字
  4. 霍尼韦尔摄像头ip地址修改_霍尼韦尔BA BNA设置
  5. 【BZOJ3470】Freda’s Walk
  6. matlab心电信号处理,基于Matlab的心电信号自动处理系统的设计与开发 毕业论文设计.doc...
  7. 分享一款CHROME极速下载管理器插件
  8. java 印章 方_用Java实现支持圆形带五角星 方形电子印章
  9. 利用ArcGIS创建要素与表之间的关系类并发布带有关系数据表的要素服务
  10. STM32通信:IIC (二)