SpringBoot学习笔记

SpringBoot学习笔记

  • 前言
  • 一、什么是SpringBoot?
  • 二、Hello World
    • 1.准备工作
    • 2.创建基础项目说明
      • 方式一:官网下载
      • 方式二:用IDEA直接创建
    • 3.pom.xml分析
    • 4.编写一个http接口
    • 5.将项目打成jar包,点击maven的package
  • 三、运行原理探究
    • 1.pom.xml
      • ①父依赖
      • ②启动器Spring-boot-Starter
    • 2.主启动类
      • @SpringBootApplication
        • ①@ComponentScan
        • ②@Configuration
        • ③@EnableAutoConfiguration
          • @AutoConfigurationPackage
          • @Import(AutoConfigurationImportSelector.class)
    • 3.SpringApplication
      • ①SpringApplication
      • ②run()方法
  • 四、yaml配置注入
    • 1.yaml语法学习
      • ①配置文件
      • ②yaml概述
      • ③yaml基础语法
    • 2.注入配置文件
      • ①yaml注入配置文件
      • ②加载指定配置文件
      • ③配置占位符
      • ④回顾Properties配置
      • ⑤对比
  • 五、JSR303数据校验及多环境切换
    • 1.JSR303数据验证
      • ①先看看如何使用
      • ②常见参数
    • 2.多环境切换
      • ①多配置文件
      • ②application.properties版激活[默认使用]
      • ③application.yml版激活
      • ④配置文件加载位置
      • ⑤扩展:运维小技巧
  • 六、自动配置原理再理解
    • ①@Configuration表示这是一个配置类
    • ②@EnableConfigurationProperties 自动配置属性
    • ③ConditionOnXXX
  • 七、自定义starter
    • 1.说明
    • 2.编写启动器【未完整】
  • 八、整合JDBC
    • 1.SpringData简介
    • 2.整合JDBC
      • Ⅰ.创建测试项目测试数据源
        • ①我去新建一个项目
        • ②编写yaml配置文件
        • ③测试。[因为SpringBoot已经帮我们自动配置好了]
        • ④寻找自动配置的来源
        • ⑤了解数据源
      • Ⅱ.JDBCTemplate
      • Ⅲ.测试
        • ①查询
        • ②添加
        • ③修改
        • ④删
  • 九、整合Druid
    • 1.简介
    • 2.配置数据源
      • ①添加依赖
      • ②切换数据源【默认使用Hikari】
      • ③测试数据源是否切换成功
      • ④设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项
      • ⑤导入Log4j日志依赖
      • ⑥添加 DruidDataSource 组件到容器中,并绑定属性。
      • ⑦去测试类中测试一下;看是否成功!
    • 3.配置Druid数据源监控
  • 十、整合MyBatis
    • 整合测试
      • ①新建项目
      • ②导入所需要的依赖
      • ③配置数据库连接信息(不变)
      • ④测试数据库是否连接成功!
      • ⑤连接数据库,创建实体类,导入 Lombok!
      • ⑥创建mapper目录以及对应的 Mapper 接口
      • ⑦对应的Mapper映射文件
      • ⑧整合[这一步不能少]
      • ⑨maven配置资源过滤问题
      • ⑩编写部门的 DepartmentController且启动主启动类 进行测试!
      • ⑩①发现:不用注册Mapper及写SqlSession;
      • ⑩②CRUD
      • ⑩③测试
  • 十一、Web开发静态资源处理
    • 1.创建项目
    • 2.测试Controller是否有问题
    • 3.静态资源文件探究源码
    • 4.首页处理
  • 十二、Thymeleaf
    • 1、模板引擎
    • 2、引入Thymeleaf
    • 3、Thymeleaf分析
      • 1.要怎么使用呢?
      • 2.测试
    • 4、hymeleaf 语法学习
  • 十三、MVC自动配置原理
    • 1.官网阅读
    • 2.ContentNegotiatingViewResolver 内容协商视图解析器
      • ①写一个视图解析器来试试
      • ②看看是否生效
      • ③启动,随便访问一个页面
    • 3.转换器和格式化器
    • 4.修改SpringBoot的默认配置
    • 5.全面接管SpringMVC
  • 十四、页面国际化
    • 1.准备工作
    • 2.配置文件编写
    • 3.配置文件生效探究
    • 4.配置页面国际化解析及取值
      • ①解析
      • ②取值准备工作:首页映射
  • 十五、集成Swagger终极版
    • 一、原由
    • 二、SpringBoot集成Swagger
      • 使用Swagger
    • 三、配置Swagger
    • 四、配置扫描接口
    • 五、配置Swagger开关
    • 六、配置API分组
    • 七、实体配置
    • 八、常用注解
    • 九、扩展:其他皮肤
  • 十六、异步、定时、邮件任务
    • 异步任务
    • 定时任务
    • 邮件任务
  • 十七、富文本编辑器
    • 一、基础工程搭建
    • 二、文章编辑整合(重点)[未完整]
  • 十八、分布式理论
    • 一、什么是分布式系统?
    • 二、Dubbo文档
    • 三、单一应用架构
    • 四、垂直应用架构
    • 五、分布式服务架构
    • 六、流动计算架构
    • RPC
    • 测试环境搭建
      • 一、Dubbo
      • 二、Dubbo环境搭建
      • 三、Windows下安装zookeeper
      • 四、windows下安装dubbo-admin
      • 五、SpringBoot + Dubbo + zookeeper
  • 十九、SpringSecurity
    • 一、安全简介
    • 二、实战测试
    • 三、认识SpringSecurity
    • 四、认证和授权
    • 五、权限控制和注销
    • 六、记住我
    • 七、定制登录页

前言

学自B站狂神

一、什么是SpringBoot?

SpringBoot学习笔记_第1张图片

二、Hello World

1.准备工作

在这里插入图片描述

2.创建基础项目说明

Spring官方提供了非常方便的工具让我们快速构建应用
Spring Initializr:https://start.spring.io/

方式一:官网下载

在这里插入图片描述
然后下拉
SpringBoot学习笔记_第2张图片
SpringBoot学习笔记_第3张图片
然后吧下载的解压 同时用IDEA打开这个解压后的文件夹
SpringBoot学习笔记_第4张图片

方式二:用IDEA直接创建

SpringBoot学习笔记_第5张图片
SpringBoot学习笔记_第6张图片
SpringBoot学习笔记_第7张图片
SpringBoot学习笔记_第8张图片
SpringBoot学习笔记_第9张图片

3.pom.xml分析

SpringBoot学习笔记_第10张图片

4.编写一个http接口

SpringBoot学习笔记_第11张图片
SpringBoot学习笔记_第12张图片
SpringBoot学习笔记_第13张图片

5.将项目打成jar包,点击maven的package

简单几步,就完成了一个web接口的开发,SpringBoot就是这么简单。所以我们常用它来建立我们的微服务项目!
关于Spring-boot-maven-plugin插件爆红
=>加入与parent中版本相同的version就行
SpringBoot学习笔记_第14张图片
关于打包失败的错误
在这里插入图片描述
=>springboot版本和maven版本冲突
有可能是端口号设置的原因
SpringBoot学习笔记_第15张图片
结果
SpringBoot学习笔记_第16张图片
SpringBoot学习笔记_第17张图片
打成了jar包后,就可以在任何地方运行了!OK 就算没有IDEA
SpringBoot学习笔记_第18张图片

三、运行原理探究

1.pom.xml

①父依赖

SpringBoot学习笔记_第19张图片
点进去之后,发现还有一个父依赖
SpringBoot学习笔记_第20张图片
这才是真正管理SpringBoot应用所有依赖版本的地方,SpringBoot版本控制中心。
以后我们导入依赖默认是不需要写版本的;但如果导入包没有在依赖中管理那么还是要手动配置版本的。

②启动器Spring-boot-Starter

SpringBoot学习笔记_第21张图片
springboot-boot-starter-xxx:就是spring-boot的场景启动器
例如:pring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件;
SpringBoot学习笔记_第22张图片
SpringBoot将所有的功能场景都抽取出来,做成一个个的starter (启动器),
只需要在项目中引入这些starter即可,所有相关的依赖都会导入进来 ,
我们要用什么功能就导入什么样的场景启动器即可,未来自己自定义 starter.

2.主启动类

SpringBoot学习笔记_第23张图片

@SpringBootApplication

作用:标注在某个类上说明这个类是SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
进入这个注解:可以看到上面还有很多其他注解!
SpringBoot学习笔记_第24张图片
@SpringBootApplication =
②@Configuration + ③@EnableAutoConfiguration + ①@ComponentScan。

①@ComponentScan

作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器

②@Configuration

在这里插入图片描述
SpringBoot学习笔记_第25张图片

③@EnableAutoConfiguration

SpringBoot学习笔记_第26张图片

@AutoConfigurationPackage

SpringBoot学习笔记_第27张图片

@Import(AutoConfigurationImportSelector.class)

作用:自动配置导入选择器。那么会导入那些组件呢
点进这个类可以看到一个名为自动配置入口的方法
SpringBoot学习笔记_第28张图片
点进这个方法
SpringBoot学习笔记_第29张图片
①.getCandidateConfigurations:获得候选配置
②.getSpringFactoriesLoaderFactoryClass():
在这里插入图片描述
返回:我们最开始看启动自动导入配置文件的注解类;EnableAutoConfiguration
③SpringFactoriesLoader详解:属于Spring框架私有的一种扩展方案,
其主要功能就是从指定的配置文件META-INF/spring.factories加载配置
SpringBoot学习笔记_第30张图片
点进下面这个类的loadFactoryNames()方法
SpringBoot学习笔记_第31张图片
Spring.factories
SpringBoot学习笔记_第32张图片
思考:为何这么多自动配置为什么有的没有生效,需要导入对应的starts才能生效?
=>核心注解:@ConditionOnXXX 如果这里面条件都满足,才会生效
SpringBoot学习笔记_第33张图片
找个不满足的例子,如下
SpringBoot学习笔记_第34张图片
看见没有。爆红了。说明不满足其条件
SpringBoot学习笔记_第35张图片

3.SpringApplication

SpringBoot学习笔记_第36张图片
SpringApplication.run分析
分析该方法主要分两部分:①SpringApplication的实例化+②run方法的执行;

①SpringApplication

SpringBoot学习笔记_第37张图片

②run()方法

SpringBoot学习笔记_第38张图片

四、yaml配置注入

1.yaml语法学习

①配置文件

SpringBoot学习笔记_第39张图片

②yaml概述

SpringBoot学习笔记_第40张图片

③yaml基础语法

SpringBoot学习笔记_第41张图片
SpringBoot学习笔记_第42张图片

2.注入配置文件

yaml文件更强大在于可以给我们实体类直接注入匹配值

①yaml注入配置文件

第一步:SpringBoot项目中resource目录新建一个文件application.yml
SpringBoot学习笔记_第43张图片
第二步:编写一个实体类
SpringBoot学习笔记_第44张图片
第三步:思考:我们原先怎么给属性赋值的?->使用@Value
SpringBoot学习笔记_第45张图片
第四步:测试狗狗输出
SpringBoot学习笔记_第46张图片
第五步:再来个一个复杂的实体类同时去掉前面给Dog属性赋值
同时使用yaml配置的方式进行注入,大家写的时候注意区别和优势,我们编写一个yaml配置!
SpringBoot学习笔记_第47张图片
SpringBoot学习笔记_第48张图片
第六步:处理报红,就算报红也能使用。
SpringBoot学习笔记_第49张图片
第七步:测试及结果
SpringBoot学习笔记_第50张图片
在这里插入图片描述

②加载指定配置文件

@PropertySource :加载指定的配置文件;
@configurationProperties:默认从全局配置文件中获取值;
第一步:去resource新建一个person.properties 【自定义配置文件】
SpringBoot学习笔记_第51张图片
第二步:然后在实体类中指定加载这个自定义配置文件
SpringBoot学习笔记_第52张图片
SpringBoot学习笔记_第53张图片
第三步:测试输出
SpringBoot学习笔记_第54张图片

③配置占位符

配置文件还可以编写占位符生成随机数.
修改之前的yaml,如图所示
SpringBoot学习笔记_第55张图片
输出结果
SpringBoot学习笔记_第56张图片
在这里插入图片描述

④回顾Properties配置

第一步:新建一个实体类User
SpringBoot学习笔记_第57张图片
第二步:编辑配置文件user.properties
SpringBoot学习笔记_第58张图片
第三步:我们在User类上使用@Value来进行注入!
SpringBoot学习笔记_第59张图片
第四步:测试
SpringBoot学习笔记_第60张图片
SpringBoot学习笔记_第61张图片

⑤对比

SpringBoot学习笔记_第62张图片
SpringBoot学习笔记_第63张图片
SpringBoot学习笔记_第64张图片
SpringBoot学习笔记_第65张图片
SpringBoot学习笔记_第66张图片
SpringBoot学习笔记_第67张图片
SpringBoot学习笔记_第68张图片

五、JSR303数据校验及多环境切换

1.JSR303数据验证

①先看看如何使用

SpringBoot学习笔记_第69张图片

我们这里来写个注解让我们的name只能支持Email格式;
SpringBoot学习笔记_第70张图片
测试
SpringBoot学习笔记_第71张图片

②常见参数

SpringBoot学习笔记_第72张图片

2.多环境切换

在这里插入图片描述

①多配置文件

SpringBoot学习笔记_第73张图片

②application.properties版激活[默认使用]

SpringBoot学习笔记_第74张图片

③application.yml版激活

SpringBoot学习笔记_第75张图片

④配置文件加载位置

外部加载配置文件方式十分多,选择最常用即可,在开发资源中进行配置
SpringBoot学习笔记_第76张图片
SpringBoot学习笔记_第77张图片
SpringBoot会从这四个位置全部加载主配置文件;互补配置
SpringBoot学习笔记_第78张图片
SpringBoot学习笔记_第79张图片

⑤扩展:运维小技巧

SpringBoot学习笔记_第80张图片

六、自动配置原理再理解

Spring.factories
我们以这个HttpEncodingAuto
SpringBoot学习笔记_第81张图片
SpringBoot学习笔记_第82张图片

①@Configuration表示这是一个配置类

②@EnableConfigurationProperties 自动配置属性

SpringBoot学习笔记_第83张图片
在这里插入图片描述
SpringBoot学习笔记_第84张图片
结果发现这是跟Yaml语法的配置文件绑定起来了,这让我们进一步了解自动装配的原理
SpringBoot学习笔记_第85张图片

③ConditionOnXXX

根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效;
SpringBoot学习笔记_第86张图片
SpringBoot学习笔记_第87张图片
SpringBoot学习笔记_第88张图片
在这里插入图片描述

七、自定义starter

我们分析完毕了源码以及自动装配的过程,我们可以尝试自定义一个启动器来玩玩!

1.说明

启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;
SpringBoot学习笔记_第89张图片

2.编写启动器【未完整】

八、整合JDBC

1.SpringData简介

SpringBoot学习笔记_第90张图片

Sping Data 官网:https://spring.io/projects/spring-data
数据库相关的启动器 :可以参考官方文档:
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter

2.整合JDBC

Ⅰ.创建测试项目测试数据源

①我去新建一个项目

新建一个项目测试:springboot-data-jdbc ; 引入相应的模块!基础模块
SpringBoot学习笔记_第91张图片

②编写yaml配置文件

SpringBoot学习笔记_第92张图片

③测试。[因为SpringBoot已经帮我们自动配置好了]

SpringBoot学习笔记_第93张图片

④寻找自动配置的来源

根据XXXConfiguration来全局搜索DataSourceAutoConfiguration
SpringBoot学习笔记_第94张图片
在这里插入图片描述
SpringBoot学习笔记_第95张图片
可以在这里看到hikariDataSource

⑤了解数据源

SpringBoot学习笔记_第96张图片

Ⅱ.JDBCTemplate

SpringBoot学习笔记_第97张图片
SpringBoot学习笔记_第98张图片
SpringBoot学习笔记_第99张图片
SpringBoot学习笔记_第100张图片
SpringBoot学习笔记_第101张图片

Ⅲ.测试

连接了数据库SpringBoot学习笔记_第102张图片
编写一个Controller,注入 jdbcTemplate,编写测试方法进行访问测试;

①查询

SpringBoot学习笔记_第103张图片
SpringBoot学习笔记_第104张图片

②添加

SpringBoot学习笔记_第105张图片
SpringBoot学习笔记_第106张图片
SpringBoot学习笔记_第107张图片

③修改

SpringBoot学习笔记_第108张图片
SpringBoot学习笔记_第109张图片
SpringBoot学习笔记_第110张图片

④删

SpringBoot学习笔记_第111张图片
SpringBoot学习笔记_第112张图片
SpringBoot学习笔记_第113张图片
测试正常,结果正常
到此,CRUD基本操作使用JDBC就搞定了

九、整合Druid

1.简介

SpringBoot学习笔记_第114张图片

Github地址:https://github.com/alibaba/druid/

com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:
SpringBoot学习笔记_第115张图片
SpringBoot学习笔记_第116张图片
SpringBoot学习笔记_第117张图片

2.配置数据源

①添加依赖

SpringBoot学习笔记_第118张图片

②切换数据源【默认使用Hikari】

SpringBoot学习笔记_第119张图片

③测试数据源是否切换成功

SpringBoot学习笔记_第120张图片

④设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项

SpringBoot学习笔记_第121张图片

⑤导入Log4j日志依赖

SpringBoot学习笔记_第122张图片

⑥添加 DruidDataSource 组件到容器中,并绑定属性。

为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成。
SpringBoot学习笔记_第123张图片

⑦去测试类中测试一下;看是否成功!

SpringBoot学习笔记_第124张图片

3.配置Druid数据源监控

Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看类似安装 路由器 时,人家也提供了一个默认的 web 页面。。第一步:需要设置 Druid 的后台管理页面,比如 登录账号、密码等;配置后台管理;

SpringBoot学习笔记_第125张图片
第二步:配置完毕后,我们可以选择访问 :http://localhost:8080/druid/login.html
SpringBoot学习笔记_第126张图片
SpringBoot学习笔记_第127张图片
SpringBoot学习笔记_第128张图片
配置 Druid web 监控 filter 过滤器
SpringBoot学习笔记_第129张图片
SpringBoot学习笔记_第130张图片
按需求进行配置即可,主要用作监控!

十、整合MyBatis

在这里插入图片描述

整合测试

①新建项目

SpringBoot学习笔记_第131张图片
删除不必要东西之后,如图SpringBoot学习笔记_第132张图片

②导入所需要的依赖

SpringBoot学习笔记_第133张图片

③配置数据库连接信息(不变)

SpringBoot学习笔记_第134张图片
SpringBoot学习笔记_第135张图片

④测试数据库是否连接成功!

SpringBoot学习笔记_第136张图片

⑤连接数据库,创建实体类,导入 Lombok!

SpringBoot学习笔记_第137张图片
SpringBoot学习笔记_第138张图片
SpringBoot学习笔记_第139张图片

⑥创建mapper目录以及对应的 Mapper 接口

SpringBoot学习笔记_第140张图片

⑦对应的Mapper映射文件

SpringBoot学习笔记_第141张图片

⑧整合[这一步不能少]

SpringBoot学习笔记_第142张图片

⑨maven配置资源过滤问题

SpringBoot学习笔记_第143张图片

⑩编写部门的 DepartmentController且启动主启动类 进行测试!

在这里插入图片描述
SpringBoot学习笔记_第144张图片

⑩①发现:不用注册Mapper及写SqlSession;

⑩②CRUD

SpringBoot学习笔记_第145张图片
SpringBoot学习笔记_第146张图片
SpringBoot学习笔记_第147张图片

⑩③测试

添加SpringBoot学习笔记_第148张图片
SpringBoot学习笔记_第149张图片
SpringBoot学习笔记_第150张图片
修改
SpringBoot学习笔记_第151张图片
SpringBoot学习笔记_第152张图片
删除
SpringBoot学习笔记_第153张图片
SpringBoot学习笔记_第154张图片

十一、Web开发静态资源处理

1.创建项目

SpringBoot学习笔记_第155张图片

2.测试Controller是否有问题

SpringBoot学习笔记_第156张图片

3.静态资源文件探究源码

在这里插入图片描述
SpringBoot学习笔记_第157张图片
SpringBoot学习笔记_第158张图片
有一个方法:addResourceHandlers 添加资源处理
SpringBoot学习笔记_第159张图片
SpringBoot学习笔记_第160张图片
SpringBoot学习笔记_第161张图片
①②都是关于静态资源的配置
对于①:什么是webjars
SpringBoot学习笔记_第162张图片
SpringBoot学习笔记_第163张图片
在这里插入图片描述
SpringBoot学习笔记_第164张图片
对于②:
staticPathPattern = “/**”=>映射到四个路径
SpringBoot学习笔记_第165张图片
点进去之后,可以看到
SpringBoot学习笔记_第166张图片
SpringBoot学习笔记_第167张图片
在这里插入图片描述

4.首页处理

源码
同样在WebMvcAutoConfiguration 这配置类里可以找到
SpringBoot学习笔记_第168张图片
测试
SpringBoot学习笔记_第169张图片
可以看到 成功了

十二、Thymeleaf

1、模板引擎

SpringBoot学习笔记_第170张图片
在这里插入图片描述
SpringBoot学习笔记_第171张图片
SpringBoot学习笔记_第172张图片

2、引入Thymeleaf

Thymeleaf 官网:https://www.thymeleaf.org/
Thymeleaf 在Github 的主页:https://github.com/thymeleaf/thymeleaf
Spring官方文档:找到我们对应的版本
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter 

在这里插入图片描述

3、Thymeleaf分析

1.要怎么使用呢?

在这里插入图片描述
SpringBoot学习笔记_第173张图片
SpringBoot学习笔记_第174张图片

2.测试

SpringBoot学习笔记_第175张图片
SpringBoot学习笔记_第176张图片
SpringBoot学习笔记_第177张图片

4、hymeleaf 语法学习

要学习语法,还是参考官网文档最为准确,我们找到对应的版本看一下!
Thymeleaf 官网:https://www.thymeleaf.org/ , 简单看一下官网!
我们去下载Thymeleaf的官方文档!

在这里插入图片描述
打开这个PDF
SpringBoot学习笔记_第178张图片
我们做个最简单的练习 :我们需要查出一些数据,在页面中展示

xmlns:th=”http://www.thymeleaf.org”

SpringBoot学习笔记_第179张图片
SpringBoot学习笔记_第180张图片
在这里插入图片描述
OK,入门搞定,我们来认真研习一下Thymeleaf的使用语法!
1、我们可以使用任意的 th:attr 来替换Html中原生属性的值!
SpringBoot学习笔记_第181张图片
2、我们能写哪些表达式呢?
在这里插入图片描述
SpringBoot学习笔记_第182张图片
SpringBoot学习笔记_第183张图片
SpringBoot学习笔记_第184张图片
在这里插入图片描述

十三、MVC自动配置原理

1.官网阅读

SpringBoot学习笔记_第185张图片

地址 :https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

=> SpringMVC做了那些配置?

Spring MVC Auto-configuration
    // Spring Boot为Spring MVC提供了自动配置,它可以很好地与大多数应用程序一起工作。
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.
    // 自动配置在Spring默认设置的基础上添加了以下功能:
The auto-configuration adds the following features on top of Spring’s defaults:
    // 包含视图解析器
Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
// 支持静态资源文件夹的路径,以及webjars
Support for serving static resources, including support for WebJars
    // 自动注册了Converter:
// 转换器,这就是我们网页提交数据到后台自动封装成为对象的东西,比如把"1"字符串自动转换为int类型
// Formatter:【格式化器,比如页面给我们了一个2019-8-10,它会给我们自动格式化为Date对象】
Automatic registration of Converter, GenericConverter, and Formatter beans.
// HttpMessageConverters
// SpringMVC用来转换Http请求和响应的的,比如我们要把一个User对象转换为JSON字符串,可以去看官网文档解释;
Support for HttpMessageConverters (covered later in this document).
    // 定义错误代码生成规则的
Automatic registration of MessageCodesResolver (covered later in this document).
    // 首页定制
Static index.html support.
    // 图标定制
Custom Favicon support (covered later in this document).
    // 初始化数据绑定器:帮我们把请求数据绑定到JavaBean中!
Automatic use of a ConfigurableWebBindingInitializer bean (covered later in this document).

    /*
    如果您希望保留Spring Boot MVC功能,并且希望添加其他MVC配置(拦截器、格式化程序、视图控制器和其他功能),
    则可以添加自己的@configuration类,类型为webmvcconfiguer,但不添加@EnableWebMvc。
    如果希望提供RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver的自定义实例,
    则可以声明WebMVCregistrationAdapter实例来提供此类组件。
    */
 If you want to keep Spring Boot MVC features and you want to add additional MVC configuration(interceptors, formatters, view controllers, and other features), 
 you can add your own@Configuration class of type WebMvcConfigurer but without @EnableWebMvc. 
 If you wish to providecustom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, orExceptionHandlerExceptionResolver, 
you can declare a WebMvcRegistrationsAdapter instance to provide such components.

// 如果您想完全控制Spring MVC,可以添加自己的@Configuration,
并用@EnableWebMvc进行注释。
If you want to take complete control of Spring MVC,
 you can add your own @Configuration annotated with @EnableWebMvc.

2.ContentNegotiatingViewResolver 内容协商视图解析器

在这里插入图片描述
SpringBoot学习笔记_第186张图片
在这里插入图片描述
在这里插入图片描述
SpringBoot学习笔记_第187张图片
在这里插入图片描述
SpringBoot学习笔记_第188张图片
然后点进去候选视图
SpringBoot学习笔记_第189张图片
在这里插入图片描述

①写一个视图解析器来试试

SpringBoot学习笔记_第190张图片

②看看是否生效

我们给 DispatcherServlet 中的 doDispatch方法 加个断点进行调试一下,因为所有的请求都会走到这个方法中
在这里插入图片描述

③启动,随便访问一个页面

SpringBoot学习笔记_第191张图片
在这里插入图片描述

3.转换器和格式化器

从WebMvcAutoConfiguration中寻找Formatter
SpringBoot学习笔记_第192张图片
点进去
SpringBoot学习笔记_第193张图片
自定义格式化
在这里插入图片描述

4.修改SpringBoot的默认配置

SpringBoot学习笔记_第194张图片
在这里插入图片描述
SpringBoot学习笔记_第195张图片
SpringBoot学习笔记_第196张图片
所以如果看到@Configuration,一定要多注意,扩展了什么功能。

5.全面接管SpringMVC

SpringBoot学习笔记_第197张图片
在这里插入图片描述
通过阅读上面的官方文档
SpringBoot学习笔记_第198张图片
关于@EnablEWebMvc,我们来看看怎么回事
在这里插入图片描述
点进去
SpringBoot学习笔记_第199张图片
发现其实就是导入了这个类,然后继续点进去
在这里插入图片描述
发现这个类继承了WebMvcConfigurationSupport
然后我们去WebMvcAutoConfiguration
SpringBoot学习笔记_第200张图片
然后就会发现这个类就是前面继承的那个类,
这也就说明了为啥加入@EnablEWebMvc会让自动配置失效的理由。

所以如果自研starter,那么需要XXXconfiguration和XXXproperties弄成jar包,
SpringBoot学习笔记_第201张图片
导入到这里。
比如
SpringBoot学习笔记_第202张图片
一定会有@ConditionalOnXXX

十四、页面国际化

我们的网站会去涉及中英文甚至多语言的切换,这时候我们就需要学习国际化。

1.准备工作

先在IDEA中统一设置properties的编码问题!
SpringBoot学习笔记_第203张图片

2.配置文件编写

SpringBoot学习笔记_第204张图片
会弹出以下窗口
SpringBoot学习笔记_第205张图片
SpringBoot学习笔记_第206张图片
④接下来,我们就来编写配置
我们可以看到idea下面有另外一个视图;
SpringBoot学习笔记_第207张图片
这个视图我们点击 + 号就可以直接添加属性了;我们新建一个login.tip,可以看到边上有三个文件框可以输入
SpringBoot学习笔记_第208张图片
我们添加一下首页的内容!SpringBoot学习笔记_第209张图片
然后依次添加其他页面内容即可!
SpringBoot学习笔记_第210张图片
然后我们去配置文件看
SpringBoot学习笔记_第211张图片
OK,配置文件步骤搞定!

3.配置文件生效探究

在这里插入图片描述
SpringBoot学习笔记_第212张图片
我们真实 的情况是放在了i18n目录下,所以我们要去配置这个messages的路径;
SpringBoot学习笔记_第213张图片
然后点进去后
SpringBoot学习笔记_第214张图片
在这里插入图片描述
所以
在这里插入图片描述
在这里插入图片描述

4.配置页面国际化解析及取值

①解析

在这里插入图片描述
SpringBoot学习笔记_第215张图片
点进去之后有个方法
SpringBoot学习笔记_第216张图片
所以:我们要自己写一个区域解析器
SpringBoot学习笔记_第217张图片
然后作为组件进行容器注册
在这里插入图片描述

②取值准备工作:首页映射

SpringBoot学习笔记_第218张图片
去BootStrap可视化布局网站
SpringBoot学习笔记_第219张图片
然后获取其代码
去页面获取国际化的值,查看Thymeleaf的文档,找到message取值操作为:#{…}。
SpringBoot学习笔记_第220张图片
修改首页代码,如下图
SpringBoot学习笔记_第221张图片
SpringBoot学习笔记_第222张图片
SpringBoot学习笔记_第223张图片
效果图:
SpringBoot学习笔记_第224张图片
SpringBoot学习笔记_第225张图片

十五、集成Swagger终极版

一、原由

SpringBoot学习笔记_第226张图片

二、SpringBoot集成Swagger

SpringBoot集成Swagger => springfox,两个jar包
Springfox-swagger2
swagger-springmvc

使用Swagger

要求:jdk 1.8 + 否则swagger2无法运行
步骤:
1、新建一个SpringBoot-web项目
2、添加Maven依赖
SpringBoot学习笔记_第227张图片
3、编写HelloController,测试确保运行成功!
SpringBoot学习笔记_第228张图片
4、要使用Swagger,我们需要编写一个配置类-SwaggerConfig来配置 Swagger
SpringBoot学习笔记_第229张图片
5、访问测试 :http://localhost:8080/swagger-ui.html ,可以看到swagger的界面;
SpringBoot学习笔记_第230张图片

三、配置Swagger

1、Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。
SpringBoot学习笔记_第231张图片
点进去之后,发现了对应
在这里插入图片描述
(1)点进去DocumentationType
SpringBoot学习笔记_第232张图片
在这里插入图片描述
(2)点进去ApiInfoSpringBoot学习笔记_第233张图片
发现SpringBoot学习笔记_第234张图片
2、可以通过apiInfo()属性配置文档信息
SpringBoot学习笔记_第235张图片
3、Docket 实例关联上 apiInfo()SpringBoot学习笔记_第236张图片
4、重启项目,访问测试 http://localhost:8080/swagger-ui.html 看下效果;SpringBoot学习笔记_第237张图片

四、配置扫描接口

1、构建Docket时通过select()方法配置怎么扫描接口。SpringBoot学习笔记_第238张图片
2、重启项目测试
由于我们配置根据包的路径扫描接口,所以我们只能看到一个类SpringBoot学习笔记_第239张图片
SpringBoot学习笔记_第240张图片
3、还可以通过配置其他方式扫描接口
SpringBoot学习笔记_第241张图片
4、还可以配置接口扫描过滤: SpringBoot学习笔记_第242张图片
在这里插入图片描述
那么就找不到这个Controller下的HelloController,因为被过滤了SpringBoot学习笔记_第243张图片

五、配置Swagger开关

1、通过enable()方法配置是否启用swagger
如果是false,swagger将不能在浏览器中访问了
SpringBoot学习笔记_第244张图片
SpringBoot学习笔记_第245张图片
2、如何动态配置
当项目处于test、dev环境时显示swagger,处于prod时不显示?
SpringBoot学习笔记_第246张图片
3、可以在项目中增加一个dev的配置文件查看效果SpringBoot学习笔记_第247张图片
然后启动SpringBoot学习笔记_第248张图片

六、配置API分组

1、如果没有配置分组,默认是default。通过groupName()即可配置分组:
SpringBoot学习笔记_第249张图片
2、如何配置多个分组?
配置多个分组只需要配置多个docket即可:SpringBoot学习笔记_第250张图片

七、实体配置

1、新建一个实体类SpringBoot学习笔记_第251张图片
2、只要这实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:SpringBoot学习笔记_第252张图片
3、重启查看测试SpringBoot学习笔记_第253张图片

八、常用注解

Swagger的所有注解定义在io.swagger.annotations包下SpringBoot学习笔记_第254张图片
我们也可以给请求的接口配置一些注释SpringBoot学习笔记_第255张图片
SpringBoot学习笔记_第256张图片

九、扩展:其他皮肤

我们可以导入不同的包实现不同的皮肤定义:
1、默认的 访问 http://localhost:8080/swagger-ui.html
SpringBoot学习笔记_第257张图片
SpringBoot学习笔记_第258张图片
2、bootstrap-ui 访问 http://localhost:8080/doc.html
SpringBoot学习笔记_第259张图片
SpringBoot学习笔记_第260张图片
3、Layui-ui 访问 http://localhost:8080/docs.html
SpringBoot学习笔记_第261张图片
SpringBoot学习笔记_第262张图片
4、mg-ui 访问 http://localhost:8080/document.html
SpringBoot学习笔记_第263张图片
SpringBoot学习笔记_第264张图片

十六、异步、定时、邮件任务

异步任务

在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。
步骤:
1.创建一个service包
2.创建一个类AsyncService
SpringBoot学习笔记_第265张图片
3.创建一个Controller包
4.编写AsyncController类在这里插入图片描述
5.测试
访问http://localhost:8080/hello进行测试,3秒后出现success,这是同步等待的情况SpringBoot学习笔记_第266张图片
在这里插入图片描述
6.给hello方法添加@Async注解;SpringBoot学习笔记_第267张图片
SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能;SpringBoot学习笔记_第268张图片
7.重启测试,网页瞬间响应,后台代码依旧执行SpringBoot学习笔记_第269张图片

定时任务

SpringBoot学习笔记_第270张图片
SpringBoot学习笔记_第271张图片
步骤:
1.创建一个ScheduledService
SpringBoot学习笔记_第272张图片
2.开启定时任务功能
这里写完定时任务之后,我们需要在主程序上增加@EnableScheduling 开启定时任务功能SpringBoot学习笔记_第273张图片
3.我们来详细了解下cron表达式;
http://www.bejson.com/othertools/cron/
4 常用的表达式SpringBoot学习笔记_第274张图片

邮件任务

邮件的发送,微信的前身也是邮件服务呢?这些东西都是怎么实现的呢?其实SpringBoot都给我们提供了对应的支持SpringBoot学习笔记_第275张图片
步骤:
1.引入依赖SpringBoot学习笔记_第276张图片
点进去依赖可以看到jakarta.mailSpringBoot学习笔记_第277张图片
2.查看自动配置类:MailSenderAutoConfigurationSpringBoot学习笔记_第278张图片
点进去之后SpringBoot学习笔记_第279张图片
SpringBoot学习笔记_第280张图片
SpringBoot学习笔记_第281张图片
3.配置文件SpringBoot学习笔记_第282张图片
获取授权码:在QQ邮箱中的设置->账户->开启pop3和smtp服务SpringBoot学习笔记_第283张图片
4.Spring单元测试
①一个简单的邮件SpringBoot学习笔记_第284张图片
然后启动,稍等一会就会看见给自己发的邮箱SpringBoot学习笔记_第285张图片
②一个复杂的邮件SpringBoot学习笔记_第286张图片
SpringBoot学习笔记_第287张图片
SpringBoot学习笔记_第288张图片

十七、富文本编辑器

SpringBoot学习笔记_第289张图片
SpringBoot学习笔记_第290张图片

一、基础工程搭建

1.数据库设计SpringBoot学习笔记_第291张图片
在这里插入图片描述
CREATE DATABASE springboot

CREATE TABLE article (
id INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘int文章的唯一ID’,
author VARCHAR(50) NOT NULL COMMENT ‘作者’,
title VARCHAR(100) NOT NULL COMMENT ‘标题’,
content LONGTEXT NOT NULL COMMENT ‘文章的内容’,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8
SpringBoot学习笔记_第292张图片
2.基础项目搭建
①新建一个项目SpringBoot学习笔记_第293张图片
②建一个SpringBoot项目配置SpringBoot学习笔记_第294张图片
③测试SpringBoot学习笔记_第295张图片
在这里插入图片描述
④导入相关依赖SpringBoot学习笔记_第296张图片
④连接数据库同时建立实体类SpringBoot学习笔记_第297张图片
⑤编写DAO接口和对应的Mapper配置文件SpringBoot学习笔记_第298张图片
⑥告诉SpringBoot这些Mapper配置文件在哪里SpringBoot学习笔记_第299张图片
⑦编写对应的Controller测试一下是否有问题SpringBoot学习笔记_第300张图片
顺序:添加->修改->查询->删除SpringBoot学习笔记_第301张图片
SpringBoot学习笔记_第302张图片
SpringBoot学习笔记_第303张图片
SpringBoot学习笔记_第304张图片
SpringBoot学习笔记_第305张图片

二、文章编辑整合(重点)[未完整]

这里我们使用的是Editor.md
所有要下载下来,如图SpringBoot学习笔记_第306张图片
①如何使用Editor
1.导入Editor.md资源,去掉一些多余的东西[留下这些框住的]SpringBoot学习笔记_第307张图片
2.新建文章页面 editor.html、需要引入 jQuery;
这里我们放在了templates目录中【属于四个路径中的一个】

十八、分布式理论

一、什么是分布式系统?

SpringBoot学习笔记_第308张图片

二、Dubbo文档

SpringBoot学习笔记_第309张图片

三、单一应用架构

SpringBoot学习笔记_第310张图片

四、垂直应用架构

SpringBoot学习笔记_第311张图片

五、分布式服务架构

SpringBoot学习笔记_第312张图片

六、流动计算架构

SpringBoot学习笔记_第313张图片
SpringBoot学习笔记_第314张图片

RPC

SpringBoot学习笔记_第315张图片

推荐阅读文章:https://www.jianshu.com/p/2accc2840a1b

SpringBoot学习笔记_第316张图片
SpringBoot学习笔记_第317张图片

测试环境搭建

一、Dubbo

pache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架。
它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo官网文档:https://dubbo.apache.org/zh/docs/

SpringBoot学习笔记_第318张图片
SpringBoot学习笔记_第319张图片
SpringBoot学习笔记_第320张图片

二、Dubbo环境搭建

点进dubbo官方文档,推荐我们使用Zookeeper 注册中心
什么是Zookeeper=>在这里插入图片描述
SpringBoot学习笔记_第321张图片
SpringBoot学习笔记_第322张图片

三、Windows下安装zookeeper

①下载windows apache-zookeeper-3.7.0-bin.tar.gz
【3.5后版本这种-bin是编译好的才是我们需要的,别下错了】
②运行/bin/zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件;
SpringBoot学习笔记_第323张图片
SpringBoot学习笔记_第324张图片

四、windows下安装dubbo-admin

SpringBoot学习笔记_第325张图片
①下载dubbo-admin

地址 :https://github.com/apache/dubbo-admin/tree/master

②解压进入目录
修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址
SpringBoot学习笔记_第326张图片
③在项目目录下打包dubbo-admin
命令:mvn clean package -Dmaven.test.skip=true
第一次打包的过程有点慢,需要耐心等待!直到成功
SpringBoot学习笔记_第327张图片
若出现错误在这里插入图片描述
那么修改
SpringBoot学习笔记_第328张图片
SpringBoot学习笔记_第329张图片
这是成功之后
SpringBoot学习笔记_第330张图片
④执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar
【注意:zookeeper的服务一定要打开!】
在这里插入图片描述
执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;
这是登录成功之后的界面SpringBoot学习笔记_第331张图片
安装完成!

五、SpringBoot + Dubbo + zookeeper

①框架搭建
1.新建一个空项目
在这里插入图片描述
2.创建一个模块,实现服务提供者[名字]:provider-server , 选择web依赖即可
SpringBoot学习笔记_第332张图片
3…项目创建完毕,我们写一个服务,比如卖票的服务;
编写接口
编写实现类SpringBoot学习笔记_第333张图片
4.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可
5.项目创建完毕,我们写一个服务,比如用户的服务;
编写serviceSpringBoot学习笔记_第334张图片
在这里插入图片描述
SpringBoot学习笔记_第335张图片
zookeeper的包我们去maven仓库下载,zkclient;SpringBoot学习笔记_第336张图片
Pom.xml
SpringBoot学习笔记_第337张图片
SpringBoot学习笔记_第338张图片
2.在springboot配置文件中配置dubbo相关属性!
SpringBoot学习笔记_第339张图片
3.在service的实现类中配置服务注解,发布服务!注意导包问题
SpringBoot学习笔记_第340张图片
逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!
③服务消费者[consumer-server]
1、导入依赖,和上面的依赖一样;
2、配置参数
SpringBoot学习笔记_第341张图片
3、本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,
我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,
即和服务提供者相同;
SpringBoot学习笔记_第342张图片
4、完善消费者的服务类SpringBoot学习笔记_第343张图片

要是少了@DubboRefence就会出现空指针异常
5、测试类SpringBoot学习笔记_第344张图片
④启动测试
SpringBoot学习笔记_第345张图片

ok , 这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,其实就是一个服务拆分的思想;

十九、SpringSecurity

一、安全简介

市面上存在比较有名的:Shiro,Spring Security !SpringBoot学习笔记_第346张图片
SpringBoot学习笔记_第347张图片
SpringBoot学习笔记_第348张图片

二、实战测试

①实验环境搭建
1.新建一个初始的springboot项目web模块,thymeleaf模块
2.导入静态资源

具体资源可以去Gitee去找,下面地址就是
https://gitee.com/ENNRIAAA/spring-security-material?_from=gitee_search

SpringBoot学习笔记_第349张图片
3.controller跳转!SpringBoot学习笔记_第350张图片
4.测试实验环境是否OK!

三、认识SpringSecurity

在这里插入图片描述
SpringBoot学习笔记_第351张图片

四、认证和授权

目前,我们的测试环境,是谁都可以访问的,使用 Spring Security 增加上认证和授权功能
①引入 Spring Security 模块
②编写 Spring Security 配置类SpringBoot学习笔记_第352张图片
SpringBoot学习笔记_第353张图片
③定制请求的授权规则SpringBoot学习笔记_第354张图片
④试一下
发现除了首页都进不去了!因为我们目前没有登录的角色,因为请求需要登录的角色拥有对应的权限才可以!
⑤在configure()方法中加入以下配置,开启自动配置的登录功能!SpringBoot学习笔记_第355张图片
⑥试一下
发现,没有权限的时候,会跳转到登录的页面!
⑦查看刚才登录页的注释信息;
我们可以定义认证规则,重写configure(AuthenticationManagerBuilder auth)方法SpringBoot学习笔记_第356张图片
⑧测试
我们可以使用这些账号登录进行测试!发现会报错!在这里插入图片描述
也就是说需要将密码加密才可以使用 这个新版本
⑨加密密码SpringBoot学习笔记_第357张图片
⑩测试
发现,登录成功,并且每个角色只能访问自己认证下的规则!搞定

五、权限控制和注销

①开启自动配置的注销的功能SpringBoot学习笔记_第358张图片
②我们在前端,增加一个注销的按钮,index.html 导航栏中SpringBoot学习笔记_第359张图片
③我们可以去测试一下
登录成功后点击注销,发现注销完毕会跳转到登录页面!
④但是,我们想让他注销成功后,依旧可以跳转到首页,该怎么处理呢?在这里插入图片描述
⑤我们可以去测试一下
注销完毕后,发现跳转到首页OKSpringBoot学习笔记_第360张图片
在这里插入图片描述
SpringBoot学习笔记_第361张图片
⑦修改我们的前端页面
导入命名空间

xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"

修改导航栏,增加认证判断 【在index.html页面】SpringBoot学习笔记_第362张图片
⑧重启测试
我们可以登录试试看,登录成功后确实,显示了我们想要的页面;SpringBoot学习笔记_第363张图片
在这里插入图片描述
SpringBoot学习笔记_第364张图片
⑩我们继续将下面的角色功能块认证完成! 【index.html页面】SpringBoot学习笔记_第365张图片
SpringBoot学习笔记_第366张图片
⑩①测试一下!SpringBoot学习笔记_第367张图片
发现确实成功了

六、记住我

在这里插入图片描述
①开启记住我功能SpringBoot学习笔记_第368张图片
SpringBoot学习笔记_第369张图片
SpringBoot学习笔记_第370张图片
③我们点击注销的时候
可以发现,spring security 帮我们自动删除了这个 cookieSpringBoot学习笔记_第371张图片
④结论
登录成功后,将cookie发送给浏览器保存,以后登录带上这个cookie,只要通过检查就可以免登录了。
如果点击注销,则会删除这个cookie,具体的原理我们在JavaWeb阶段都讲过了,这里就不在多说了!

七、定制登录页

现在这个登录页面都是spring security 默认的,怎么样可以使用我们自己写的Login界面呢?
①在刚才的登录页配置后面指定 loginpage在这里插入图片描述
②然后前端也需要指向我们自己定义的 login请求 【index.html】
SpringBoot学习笔记_第372张图片
③我们登录需要处理的地方
需要将这些信息发送到哪里,
我们也需要配置,login.html 配置提交请求及方式,方式必须为post: 【login.html】SpringBoot学习笔记_第373张图片
吧这些参数传给了/login 而我们自己定制的首页是/toLogin所以还需要处理
④这个请求提交上来需要处理的地方
我们还需要验证处理,怎么做呢?我们可以查看formLogin()方法的源码!我们配置接收登录的用户名和密码的参数!SpringBoot学习笔记_第374张图片
点进去之后然后往下拉,可以看见在这里插入图片描述
所以在这里插入图片描述
⑤在登录页增加记住我的多选框 【login.html】在这里插入图片描述
⑥后端验证处理!在这里插入图片描述
⑦测试
OK

你可能感兴趣的:(SpringBoot学习笔记)