SpringBoot学习笔记

SpringBoot学习笔记

前言

学自B站狂神

一、什么是SpringBoot?

在这里插入图片描述

二、Hello World

1.准备工作

在这里插入图片描述

2.创建基础项目说明

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

方式一:官网下载

在这里插入图片描述
然后下拉
在这里插入图片描述
在这里插入图片描述
然后吧下载的解压 同时用IDEA打开这个解压后的文件夹
在这里插入图片描述

方式二:用IDEA直接创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.pom.xml分析

在这里插入图片描述

4.编写一个http接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

三、运行原理探究

1.pom.xml

①父依赖

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

②启动器Spring-boot-Starter

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

2.主启动类

在这里插入图片描述

@SpringBootApplication

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

①@ComponentScan

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

②@Configuration

在这里插入图片描述
在这里插入图片描述

③@EnableAutoConfiguration

在这里插入图片描述

@AutoConfigurationPackage

在这里插入图片描述

@Import(AutoConfigurationImportSelector.class)

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

3.SpringApplication

在这里插入图片描述
SpringApplication.run分析
分析该方法主要分两部分:①SpringApplication的实例化+②run方法的执行;

①SpringApplication

在这里插入图片描述

②run()方法

在这里插入图片描述

四、yaml配置注入

1.yaml语法学习

①配置文件

在这里插入图片描述

②yaml概述

在这里插入图片描述

③yaml基础语法

在这里插入图片描述
在这里插入图片描述

2.注入配置文件

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

①yaml注入配置文件

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

②加载指定配置文件

@PropertySource :加载指定的配置文件;
@configurationProperties:默认从全局配置文件中获取值;
第一步:去resource新建一个person.properties 【自定义配置文件】
在这里插入图片描述
第二步:然后在实体类中指定加载这个自定义配置文件
在这里插入图片描述
在这里插入图片描述
第三步:测试输出
在这里插入图片描述

③配置占位符

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

④回顾Properties配置

第一步:新建一个实体类User
在这里插入图片描述
第二步:编辑配置文件user.properties
在这里插入图片描述
第三步:我们在User类上使用@Value来进行注入!
在这里插入图片描述
第四步:测试
在这里插入图片描述
在这里插入图片描述

⑤对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

1.JSR303数据验证

①先看看如何使用

Springboot中可以用@validated来校验数据,若数据异常则会统一抛出异常,方便异常中心统一处理。

我们这里来写个注解让我们的name只能支持Email格式;
在这里插入图片描述
测试
在这里插入图片描述

②常见参数

在这里插入图片描述

2.多环境切换

在这里插入图片描述

①多配置文件

在这里插入图片描述

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

在这里插入图片描述

③application.yml版激活

在这里插入图片描述

④配置文件加载位置

外部加载配置文件方式十分多,选择最常用即可,在开发资源中进行配置
在这里插入图片描述
在这里插入图片描述
SpringBoot会从这四个位置全部加载主配置文件;互补配置
在这里插入图片描述
在这里插入图片描述

⑤扩展:运维小技巧

在这里插入图片描述

六、自动配置原理再理解

Spring.factories
我们以这个HttpEncodingAuto
在这里插入图片描述
在这里插入图片描述

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

②@EnableConfigurationProperties 自动配置属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果发现这是跟Yaml语法的配置文件绑定起来了,这让我们进一步了解自动装配的原理
在这里插入图片描述

③ConditionOnXXX

根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、自定义starter

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

1.说明

启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;
在这里插入图片描述

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

八、整合JDBC

1.SpringData简介

在这里插入图片描述

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 ; 引入相应的模块!基础模块
在这里插入图片描述

②编写yaml配置文件

在这里插入图片描述

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

在这里插入图片描述

④寻找自动配置的来源

根据XXXConfiguration来全局搜索DataSourceAutoConfiguration
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以在这里看到hikariDataSource

⑤了解数据源

在这里插入图片描述

Ⅱ.JDBCTemplate

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Ⅲ.测试

连接了数据库在这里插入图片描述
编写一个Controller,注入 jdbcTemplate,编写测试方法进行访问测试;

①查询

在这里插入图片描述
在这里插入图片描述

②添加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

④删

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试正常,结果正常
到此,CRUD基本操作使用JDBC就搞定了

九、整合Druid

1.简介

在这里插入图片描述

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

com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.配置数据源

①添加依赖

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

⑤导入Log4j日志依赖

在这里插入图片描述

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

为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成。
在这里插入图片描述

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

在这里插入图片描述

3.配置Druid数据源监控

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

在这里插入图片描述
第二步:配置完毕后,我们可以选择访问 :http://localhost:8080/druid/login.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置 Druid web 监控 filter 过滤器
在这里插入图片描述
在这里插入图片描述
按需求进行配置即可,主要用作监控!

十、整合MyBatis

在这里插入图片描述

整合测试

①新建项目

在这里插入图片描述
删除不必要东西之后,如图在这里插入图片描述

②导入所需要的依赖

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

⑦对应的Mapper映射文件

在这里插入图片描述

⑧整合[这一步不能少]

在这里插入图片描述

⑨maven配置资源过滤问题

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

⑩②CRUD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⑩③测试

添加在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改
在这里插入图片描述
在这里插入图片描述
删除
在这里插入图片描述
在这里插入图片描述

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

1.创建项目

在这里插入图片描述

2.测试Controller是否有问题

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有一个方法:addResourceHandlers 添加资源处理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
①②都是关于静态资源的配置
对于①:什么是webjars
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于②:
staticPathPattern = “/**”=>映射到四个路径
在这里插入图片描述
点进去之后,可以看到
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.首页处理

源码
同样在WebMvcAutoConfiguration 这配置类里可以找到
在这里插入图片描述
测试
在这里插入图片描述
可以看到 成功了

十二、Thymeleaf

1、模板引擎

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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.要怎么使用呢?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、hymeleaf 语法学习

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

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

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

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

十三、MVC自动配置原理

1.官网阅读

在这里插入图片描述

地址 :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 内容协商视图解析器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后点进去候选视图
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

②看看是否生效

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

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

在这里插入图片描述
在这里插入图片描述

3.转换器和格式化器

从WebMvcAutoConfiguration中寻找Formatter
在这里插入图片描述
点进去
在这里插入图片描述
自定义格式化
在这里插入图片描述

4.修改SpringBoot的默认配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以如果看到@Configuration,一定要多注意,扩展了什么功能。

5.全面接管SpringMVC

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

所以如果自研starter,那么需要XXXconfiguration和XXXproperties弄成jar包,
在这里插入图片描述
导入到这里。
比如
在这里插入图片描述
一定会有@ConditionalOnXXX

十四、页面国际化

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

1.准备工作

先在IDEA中统一设置properties的编码问题!
在这里插入图片描述

2.配置文件编写

在这里插入图片描述
会弹出以下窗口
在这里插入图片描述
在这里插入图片描述
④接下来,我们就来编写配置
我们可以看到idea下面有另外一个视图;
在这里插入图片描述
这个视图我们点击 + 号就可以直接添加属性了;我们新建一个login.tip,可以看到边上有三个文件框可以输入
在这里插入图片描述
我们添加一下首页的内容!在这里插入图片描述
然后依次添加其他页面内容即可!
在这里插入图片描述
然后我们去配置文件看
在这里插入图片描述
OK,配置文件步骤搞定!

3.配置文件生效探究

在这里插入图片描述
在这里插入图片描述
我们真实 的情况是放在了i18n目录下,所以我们要去配置这个messages的路径;
在这里插入图片描述
然后点进去后
在这里插入图片描述
在这里插入图片描述
所以
在这里插入图片描述
在这里插入图片描述

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

①解析

在这里插入图片描述
在这里插入图片描述
点进去之后有个方法
在这里插入图片描述
所以:我们要自己写一个区域解析器
在这里插入图片描述
然后作为组件进行容器注册
在这里插入图片描述

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

在这里插入图片描述
去BootStrap可视化布局网站
在这里插入图片描述
然后获取其代码
去页面获取国际化的值,查看Thymeleaf的文档,找到message取值操作为:#{…}。
在这里插入图片描述
修改首页代码,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果图:
在这里插入图片描述
在这里插入图片描述

十五、集成Swagger终极版

一、原由

在这里插入图片描述

二、SpringBoot集成Swagger

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

使用Swagger

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

三、配置Swagger

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

四、配置扫描接口

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

五、配置Swagger开关

1、通过enable()方法配置是否启用swagger
如果是false,swagger将不能在浏览器中访问了
在这里插入图片描述
在这里插入图片描述
2、如何动态配置
当项目处于test、dev环境时显示swagger,处于prod时不显示?
在这里插入图片描述
3、可以在项目中增加一个dev的配置文件查看效果在这里插入图片描述
然后启动在这里插入图片描述

六、配置API分组

1、如果没有配置分组,默认是default。通过groupName()即可配置分组:
在这里插入图片描述
2、如何配置多个分组?
配置多个分组只需要配置多个docket即可:在这里插入图片描述

七、实体配置

1、新建一个实体类在这里插入图片描述
2、只要这实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:在这里插入图片描述
3、重启查看测试在这里插入图片描述

八、常用注解

Swagger的所有注解定义在io.swagger.annotations包下在这里插入图片描述
我们也可以给请求的接口配置一些注释在这里插入图片描述
在这里插入图片描述

九、扩展:其他皮肤

我们可以导入不同的包实现不同的皮肤定义:
1、默认的 访问 http://localhost:8080/swagger-ui.html
在这里插入图片描述
在这里插入图片描述
2、bootstrap-ui 访问 http://localhost:8080/doc.html
在这里插入图片描述
在这里插入图片描述
3、Layui-ui 访问 http://localhost:8080/docs.html
在这里插入图片描述
在这里插入图片描述
4、mg-ui 访问 http://localhost:8080/document.html
在这里插入图片描述
在这里插入图片描述

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

异步任务

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

定时任务

在这里插入图片描述
在这里插入图片描述
步骤:
1.创建一个ScheduledService
在这里插入图片描述
2.开启定时任务功能
这里写完定时任务之后,我们需要在主程序上增加@EnableScheduling 开启定时任务功能在这里插入图片描述
3.我们来详细了解下cron表达式;
http://www.bejson.com/othertools/cron/
4 常用的表达式在这里插入图片描述

邮件任务

邮件的发送,微信的前身也是邮件服务呢?这些东西都是怎么实现的呢?其实SpringBoot都给我们提供了对应的支持在这里插入图片描述
步骤:
1.引入依赖在这里插入图片描述
点进去依赖可以看到jakarta.mail在这里插入图片描述
2.查看自动配置类:MailSenderAutoConfiguration在这里插入图片描述
点进去之后在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.配置文件在这里插入图片描述
获取授权码:在QQ邮箱中的设置->账户->开启pop3和smtp服务在这里插入图片描述
4.Spring单元测试
①一个简单的邮件在这里插入图片描述
然后启动,稍等一会就会看见给自己发的邮箱在这里插入图片描述
②一个复杂的邮件在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十七、富文本编辑器

在这里插入图片描述
在这里插入图片描述

一、基础工程搭建

1.数据库设计在这里插入图片描述
在这里插入图片描述
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
在这里插入图片描述
2.基础项目搭建
①新建一个项目在这里插入图片描述
②建一个SpringBoot项目配置在这里插入图片描述
③测试在这里插入图片描述
在这里插入图片描述
④导入相关依赖在这里插入图片描述
④连接数据库同时建立实体类在这里插入图片描述
⑤编写DAO接口和对应的Mapper配置文件在这里插入图片描述
⑥告诉SpringBoot这些Mapper配置文件在哪里在这里插入图片描述
⑦编写对应的Controller测试一下是否有问题在这里插入图片描述
顺序:添加->修改->查询->删除在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

十八、分布式理论

一、什么是分布式系统?

在这里插入图片描述

二、Dubbo文档

在这里插入图片描述

三、单一应用架构

在这里插入图片描述

四、垂直应用架构

在这里插入图片描述

五、分布式服务架构

在这里插入图片描述

六、流动计算架构

在这里插入图片描述
在这里插入图片描述

RPC

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

测试环境搭建

一、Dubbo

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Dubbo环境搭建

点进dubbo官方文档,推荐我们使用Zookeeper 注册中心
什么是Zookeeper=>在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Windows下安装zookeeper

①下载windows apache-zookeeper-3.7.0-bin.tar.gz
【3.5后版本这种-bin是编译好的才是我们需要的,别下错了】
②运行/bin/zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件;
在这里插入图片描述
③修改zoo.cfg配置文件

四、windows下安装dubbo-admin

在这里插入图片描述
①下载dubbo-admin

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

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

五、SpringBoot + Dubbo + zookeeper

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

要是少了@DubboRefence就会出现空指针异常
5、测试类在这里插入图片描述
④启动测试
在这里插入图片描述

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

十九、SpringSecurity

一、安全简介

市面上存在比较有名的:Shiro,Spring Security !在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、实战测试

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

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

在这里插入图片描述
3.controller跳转!在这里插入图片描述
4.测试实验环境是否OK!

三、认识SpringSecurity

在这里插入图片描述
在这里插入图片描述

四、认证和授权

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

五、权限控制和注销

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

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

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

六、记住我

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

七、定制登录页

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值