百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

阿里内部热捧的SpringBoot全栈笔记,源码实战齐飞,火速收藏

toyiye 2024-06-21 19:09 11 浏览 0 评论

今日分享开始啦,请大家多多指教~

学习目标

  1. 掌握使用路径扫描方式整合Servlet
  2. 掌握使用路径扫描方式整合Filter
  3. 掌握使用路径扫描方式整合Listener

在Spring Boot中,使用路径扫描的方式整合内嵌式Servlet容器的Servlet、Filter、Listener三大组件时,首先需要在自定义组件上分别添加@WebServlet、@WebFilter和@WebListener注解进行声明,并配置相关注解属性,然后在项目主程序启动类上使用@ServletComponentScan注解开启组件扫描即可。

一、创建Spring Boot项目 - IntegrateThreeComponents02

二、使用路径扫描方式整合Servlet三大组件

(一)创建MyServlet类

  • 通过注解@WebServlet("/hello")给MyServlet定义了urlPattern

(二)创建CodeServlet类

(三)创建MyFilter类

  • 通过注解@WebFilter(value = {"/hello", "/code"})让MyFilter过滤两个指定的请求。

(四)创建MyListener类

通过注解@WebListener("/")监听一切请求。

(五)修改入口类,添加ServletComponentScan注解

(六)启动应用,测试效果

启动应用后查看控制台输出

访问http://localhost:8080/hello

访问http://localhost:8080/code

可以看到,跟上一讲的项目,运行结果完全一致。

三、路径扫描整合Servlet三大组件小结

使用注解方式,可以省配置文件(比如ServletConfig、FilterConfig和ListenerConfig),大大简化了操作,实际应用时尽量采用此方式来整合Servlet三大组件。

学习目标

掌握利用Spring Boot实现文件上传功能

四、文件上传概述

开发Web应用时,文件上传是很常见的一个需求,浏览器通过表单形式将文件以流的形式传递给服务器,服务器对上传的数据解析处理,Spring Boot中进行文件上传与Spring MVC框架上传类似。

五、实现文件上传功能

(一)创建Spring Boot项目

创建FileUploadDemo项目,添加Web和Thymeleaf依赖

(二)整合Bootstrap

将第11讲项目SpringMvcDemo2021的resources/static里的bootstrap-4.0.0拷贝到当前项目相应位置。

(三)编写文件上传页面

在templates目录里创建文件上传页面 - fileupload.html

表单method必须使用post

表单enctype必须是multipart/form-data

(四)编写项目配置文件

注意配置文件上传文件大小不是M做单位,而是Byte

50M = 50 * 1024 * 1024 B= 52428800 B

300M = 300 * 1024 * 1024 B = 314572800 B

(五)编写文件上传控制器

(六)启动应用,测试效果

访问http://localhost:8080/uploadFile

查看上传成功的文件

修改文件上传控制器的uploadFile方法的代码

六、控制上传文件类型

可通过上传文件的contentType(String contentType = file.getContentType();)来判断,符合要求的文件则写入磁盘,否则反馈错误信息。

文件超过指定大小也可以在控制器中进行判断,然后给前台反馈友好的提示。

前台也可以先用js做初步判断后再提交表单。

学习目标

  1. 熟悉Spring Boot的默认缓存管理
  2. 熟悉Spring Boot的缓存注解及使用

七、缓存概述

(一)引入缓存管理的重要性

缓存是分布式系统中的重要组件,主要解决数据库数据的高并发访问。在实际开发中,尤其是用户访问量较大的网站,用户对高频热点数据的访问非常频繁,为了提高服务器访问性能、减少数据库的压力、提高用户体验,使用缓存显得尤为重要,Spring Boot针对这种实际需求,对缓存提供了良好的支持。

(二)Spring Boot的缓存管理

Spring框架支持透明地向应用程序添加缓存对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法,从而减少操作数据的执行次数,同时不会对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能,通过使用@EnableCaching注解开启基于注解的缓存支持,Spring Boot可以启动缓存管理的自动化配置。

八、Spring Boot默认缓存

(一)数据准备

(二)创建Spring Boot项目 - DefaultCacheDemo

(三)创建数据库表对应的实体类

1、创建评论实体类 - Comment

2、创建文章实体类 - Article

(四)创建Repository接口

1、创建评论仓库接口 - CommentRepository

2、创建文章仓库接口 - ArticleRepository

(五)编写Service类

1、创建CommentService类

2、创建ArticleService类

(六)编写控制器

1、编写评论控制器 - CommentController

2、编写文章控制器 - ArticleController

(七)配置全局属性文件

(八)启动应用,测试效果

1、测试查询

查询编号为1的评论记录

访问http://localhost:8080/find/1

2、测试更新

修改编号1的评论记录,内容改为“十分有趣,值得一读”,作者改为“无心剑”

访问 http://localhost:8080/update?id=1&comment=十分有趣,值得一读&author=无心剑&aId=1

再次查询编号为1的评论记录

看,是不是评论的内容和作者都已经修改成功了?

3、测试删除

删除编号为1的评论

访问http://localhost:8080/delete/1


再次查询编号为1的评论记录

查看评论表 - t_comment

(九)课后拓展练习

完成ArticleService,ArticleController类并进行测试 - 查询、更新、删除

更新时如果给定的参数值中有中文,写入数据库是乱码,查询资料,解决乱码问题

(十)测试未启用缓存的效果

访问http://localhost:8080/find/2,查看刷新页面效果

说明:页面每刷新一次,控制台会输出一次SQL语句,即每查询一次,就会访问一次数据库,大大增加了数据库的负担。

(十一)开启默认缓存

1、在入口类上加注释@EnableCaching

该注解一般使用在类上,通常使用在入口 类上

2、在服务类需要启用缓存的方法上加注解@Cacheable

@Cacheable注解既可用在方法上,也可用在类上

(十二)测试启用默认缓存后的效果

启动应用,访问http://localhost:8080/find/2,并刷新页面查看效果

说明:第一次访问页面时控制台会有SQL语句输出,往后刷新时则不会继续输出SQL语句,即不再连接数据库取数据,而是从缓存中取数据。

九、Spring Boot默认缓存小结

(一)使用缓存的作用

缓存一般用在查询方法上,可以减轻数据库服务器的压力。

(二)常用注解

1、@EnableCaching注解

该注解一般使用在Spring Boot项目的入口类上,开启项目的缓存功能

2、@Cachable注解

  • @Cacheable注解也是由Spring框架提供的,可以作用于类或方法(通常用在数据查询方法上),用于对方法结果进行缓存存储。
  • @Cacheable注解的执行顺序是,先进行缓存查询,如果为空则进行方法查询,并将结果进行缓存;如果缓存中有数据,不进行方法查询,而是直接使用缓存数据。
  • @Cacheable可以指定三个属性,value、key和condition。

(1)value属性

value属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。其可以是一个Cache也可以是多个Cache。

(2)key属性

key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,Spring将使用默认策略生成key。

(3)condition属性

  • 有的时候我们可能并不希望缓存一个方法所有的返回结果。通过condition属性可以实现这一功能。condition属性默认为空,表示将缓存所有的调用情形。其值是通过SpringEL表达式来指定的,当为true时表示进行缓存处理;当为false时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次。
  • 案例演示:只有当comment的id为偶数时才会进行缓存。

3、@CachePut注解

  • 在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。
  • @CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
  • @CachePut也可以标注在类上和方法上。使用@CachePut时我们可以指定的属性跟@Cacheable是一样的。

4、@CacheEvict注解

@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。

其中value、key和condition的语义与@Cacheable对应的属性类似。即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件。

下面我们来介绍一下新出现的两个属性allEntries和beforeInvocation。

(1)allEntries属性

allEntries是boolean类型,表示是否需要清除缓存中的所有元素。默认为false,表示不需要。当指定了allEntries为true时,Spring Cache将忽略指定的key。有的时候我们需要Cache一下清除所有的元素,这比一个一个清除元素更有效率。

(2)beforeInvocation属性

清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,Spring会在调用该方法之前清除缓存中的指定元素。

学习目标

  1. 了解Spring Boot支持的缓存组件
  2. 掌握基于注解的Redis缓存实现
  3. 掌握基于API的Redis缓存实现

十、Spring Boot支持的缓存组件

Spring Boot内部嵌入了支持的一系列缓存管理组件,并按照顺序查找加载有效的缓存组件进行缓存管理,如果没有任何缓存组件,会默认使用最后一个Simple默认缓存管理组件进行管理。在实际开发中,通常会使用专业的第三方缓存插件进行缓存管理。

如果开启了缓存,Spring Boot会按照以下顺序去查找缓存组件:

  1. Generic
  2. JCache (JSR-107) (EhCache 3、Hazelcast、Infinispan等)
  3. EhCache 2.x
  4. Hazelcast
  5. Infinispan
  6. Couchbase
  7. Redis
  8. Caffeine
  9. Simple(默认)

十一、基于注解的Redis缓存实现

(一)安装与启动Redis

(二)创建Spring Boot项目 - RedisCacheDemo01

设置组标识、项目标识、包名

添加Spring Web、Spring Data JPA、MySQL Driver、Spring Data Redis依赖

设置项目名及保存位置

查看pom.xml文件

(三)创建评论实体类 - Comment

要实现缓存,实体类必须要实现序列化接口Serializable

(四)创建评论仓库接口 - CommentRepository

自定义方法添加注解@Modifying实现数据更新操作

(五)创建评论服务类 - CommentService

(六)创建评论控制器 - CommentController

(七)配置系统属性文件 - application.properties

(八)在入口类添加注解@EnableCaching开启缓存

(九)Redis可视化工具连接Redis服务

在命令行窗口,启动Redis服务

启动Redis可视化管理工具

(十)启动应用,测试效果

1、测试各个方法的观察点

  • 浏览器返回值
  • 控制台输出数据
  • Redis数据数据变化
  • MySQL数据库数据变化

2、基于注解的Redis查询缓存测试

MySQL数据库评论表原始数据

Redis数据库原始数据

访问http://localhost:8080/find/1

查看控制台输出的SQL语句

查看Redis数据库缓存的数据

此时,刷新页面,控制台不会输出SQL语句,也就是说不再查询数据库,直接使用Redis缓存数据

3、基于注解的Redis更新缓存测试

查看控制台输出的SQL语句

查看Redis数据库缓存的数据

查看MySQL数据库中的评论表

4、基于注解的Redis删除缓存测试

访问http://localhost:8080/delete/1

查看控制台输出的SQL语句

查看查看Redis数据库,缓存的数据已被删除

查看MySQL数据库中的评论表,id为1的评论已被删除

今日份分享已结束,请大家多多包涵和指点!

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码