[SpringBoot]知识点总结

本文详述了SpringBoot的基础配置、Web容器配置、视图层技术整合、Web开发及跨域支持,涵盖SpringBoot与数据库、NoSQL的集成,如JdbcTemplate、MyBatis、Redis,以及Spring Security和Shiro的认证授权。此外,还讨论了WebSocket、消息服务(JMS、AMQP)、邮件发送、定时任务、Swagger2文档和数据校验等企业级开发必备功能。
摘要由CSDN通过智能技术生成

springboot

springboot

springboot优势:

  • 快速搭建spring项目
  • 纯java配置不需要xml配置,开箱即用很少的配置就可以搭建J2E项目
  • 内嵌服务器可以快速部署

springboot基础配置

  • spring-boot-parent配置在pom.xml中,主要做java默认版本编码格式默认资源过滤插件等配置,是可以不使用该,进行更改的
  • @SpringBootApplicaton是一个由
    • @Configuration,配置类,
    • @EnableAutoCOnfiguration 开启自动化配置
    • @ConponentScan(完成包扫描),该注解默认扫描的类都位于当前类所在包下

Web容器配置

  • SpringBoot项目添加spring-boot-starter-web后默认为tomcat作为容器,可以在application,propertise中配置服务器,端口,项目出错跳转路径
  • 可以进行https配置
  • 配置Jetty,Undertow等服务器

类型安全配置属性

  • 无论是Properties还是YAML配置都会被加载到SpringEnvironment中,Spring提供了==@Value注解以及 EnvironmentAware 接口==,将SpringEnvironment中的数据注入到属性上
  • Spring Boot 对此进一步提出了类型安全配置属性 ,即使在数据量非常庞大的情况下,也可以更加方便地将配置文件中 的数据注入 Bean

application.properties
在这里插入图片描述
将这一段配置数据注入Bean

在这里插入图片描述

  • @ConfigurationProperties 中的 prefix 属性描述了要加载的配置文件的前缀
  • 此类配置可能会乱码,需要对中文进行转码,只需再IDEA/Settings做简单配置即可

Properties配置(YML配置)

  • 一些自定义的配置
  • YAML 的使用非常简单,利用缩进 来表示层级关系,并且大小写敏感

Profile配置

通过类似@Profile注解等解决方案,可以避免项目在开发环境/测试环境/生产环境之间来回切换时频繁大量的修改代码

springboot整合视图层技术

虽然目前前后端分离是趋势,但是视图层技术还是有一定的意义

  • thymelef
  • freemarker

springboot整合web开发

Json数据

  • spring-boot-starter-web默认添加了了 jackson-databind 作为 JSON 处理器,可以直接返回json
  • 前后端数据的主流传输方式为json
  • 注解@Responsebody可以返回json数据,频繁使用该注解时可以使用@RestController注解

静态资源访问

  • springmvc中需要手动对静态资源进行过滤
  • springboot提供了自动化配置

默认策略

  • springboot默认会过滤所有的静态资源,共有五个位置(任意位置下都会规律)
    • ”classpath:/META-INF /resources
    • classpath:/resources
    • classpath:/static
    • classpath:/public
    • /
  • 对于intellij可以将静态资源放在其默认创建出来的classpath:/static/目录下(一般都这样放置)
  • springboot项目默认是不需要webapp目录的
classpath
  • src 路径下的文件 在编译后都会放到 WEB-INF/classes 路径下。默认classpath 就是指这里
  • 用maven构建 项目时,resources 目录就是默认的classpath

自定义策略

@ControllerAdvice

  • @Controller增强版,主要用来处理全局数据,一般搭配@Exceptionhandler,@Modelattibute使用
  • 最常用的使用场景就是全局异常处理,配合@Exceptionhandler定义全局异常捕获机制

在这里插入图片描述

  • 添加@ControllerAdvice 注解即可。当系 统启动时,该类就会被扫描到 Spring 容器中
  • 后定义 uploadException 方法,在该方法上添加了 @ExceptionHandler注解,其中定义的 MaxUploadS izeExceededException. class 表明该方法用来处理 Max UploadSizeExceededException 类型的异常
  • 方法的参数可以有异常实例、 HttpServletResponse 以 及 HttpServletRequest 、 Model 等
  • 果想让该方法处理所有类型的异常,只需将 Max U ploadS izeExceededException 改为 Exception 即可

自定义错误页

  • springboot可以用@ControllerAdvice做全局异常处理,但是这种异常处理机制只能处理应用级别的异常而无法处理容器级别的异常,比如filter抛出的异常
  • springboot在用户访问出错时会有一个默认的页面返回给用户,可以进行自定义

CORS支持

  • CORS跨域资源共享技术标准,支持多种HTTP请求(JSNOP只支持GET)

  • 支持CORS的服务端在响应头中用Access-Control-Allow-Origin字段用来记录可访问该资源的域,浏览器会提取该字段该字段的值包含当前页面也在的域则不再对前段的跨域请求限制,这个流程只针对GET,POST,和HEAD请求且没自定义头

  • 而复杂请求则会有两次请求,一次OPTIONS(用来判断真正请求是否可用)一次真正的请求,简单请求和复杂请求前端代码一致,额外处理均在后端完成

CORS简单请求实例

支持CORS浏览器请求
在这里插入图片描述
服务器支持CORS,响应格式为,主要是添加了Access-Control-Allow-Origin字段记录可以访问该资源的域(包含了当前页面所在的域)
在这里插入图片描述

CORS复杂请求实例

OPTIONS请求和处理
  • DELETE为例,前端浏览器发起的DELETE请求会先发送一个OPTIONS请求,这个请求将向服务端询问是否具备该资源的 DELETE 权限
    在这里插入图片描述

  • 服务端给浏览器响应,Allow 头信息表示服务端支持的请求方法当浏览器分析了请求头宇段之后,知道服务端支持本次请求,则进入下一步

     HTTP/1.1 200 
     Access-Control-Allow- Origin: http://localhost:8081 
     Access-Control-Allow-Methods: DELETE 
     Access- Control-Max-Age: 1800 Allow: GET, HEAD, POST, PUT , DELETE, OPTIONS , PATCH 
     Content-Length : 0 Date: Thu, 12 Jul 2018 13 :20:26 GMT 
     ..
     .. 
    
DELETE请求

浏览器就会发送一个跨域的 DELETE 请求
在这里插入图片描述
服务器响应
在这里插入图片描述

  • 至此一个跨域的DELETE请求完成,简单复杂请求的前端代码都是一样的,额外处理实在服务端完成的
  • 在传统的JavaEE 开发中,可以通过过滤器统一配置,而 Spring Boot 中对此则提 供了更加简洁的解决方案

SpringBoot跨域解决

  • 在注解在方法上配置@CrossOrigin(value=“http://localhost:8081”,maxAge=1800,allowHeaders=“*”)

    在注解在方法上的细粒度的控制

    • value表示支持的域
    • maxAge:探测请求有效期
    • allowHeaders表示允许的请求头
  • 配置一个全局配置类

    • 自定类实现WebMvcConfig接口,再实现其中addCorsMappings方法

    • addCorsMappings

      • addMapping表示对哪种请求格式进行跨域处理
      • allowHeaders允许的请求头
      • allowedMethods允许的请求方法
      • allowedOrigins 支持的域

配置类与XML配置

  • springboot推荐使用Java完成相关配置工作而不建议将配置放入配置类,而是根据不同需求设置不同配置类
  • 在相关配置类上加上@Configuration注解,@ComponentScan会扫描所有的Spring组件包括@Configuration,@ComponentScan在项目的入口类的@SpringbootApplication注解已经提供
  • springboot并不推荐使用xml配置,尽量用java代替

注册拦截器

  • springMVC提供了AOP风格的拦截器是更细粒度的控制
  • springboot项目中,自定义类实现HandlerInterceptor接口,实现其中的方法,preHandle,Controller,postHandle,afterCompletion,且这几个方法是优先级逐渐降低的

启动系统任务

  • spring中一些在系统启动时需要执行的任务如配置文件的加载数据库的初始化等,可以配置Listener解决
  • springboot提供了ConmandLineRunner和ApplicationRunner两种方案,两者基本只在参数上有所区别
  • 使用方法上是自定义类实现CommandLineRunner并实现run(),springboot项目在启动时会遍历所有CommandLineRunner实现类病调用其中run()方法,多个类之间可以用@Order进行排序

整合Servlet,Filter和Listener

这些基本web组件在spring springmvc整合后基本告别,springboot提供了几个注解能够对这几个组件进行标记

路径映射

  • 一般情况下, 使用了页面模板后,用户需要通过控制器才能访问页面(有一些页面需要在控 制器中加载数据,然后渲染,才能显示出来)
  • 对于在控制器中不需要加载数据,只是完成简单的跳转,可以直接配置路径映射,提高访问速度
    在这里插入图片描述
  • 如上配置完成后,就可以直接访问 http://localhost:8080/login 等地址

aop

  • springboot提供了对aop的自动化配置解决方案
  • 引入springboot-starter-aop依赖即可

其他

springboot项目启动后会默认找静态资源路径下的index.html找不到则会找动态的index文件作为首页文件3

Spring Boot 整合持久层技术

整合JdbcTemplate

  • JdbcTemplate 是 Spring 提供的JDBC 模板框架,利用 AOP 技术来解决直接使用JDBC时 大量重复代码的问题
  • JdbcTemplat巳 虽然没有 MyBatis 那么灵活,但是比直接使用 JDBC 要方便很多
  • Spring Boot 中对 JdbcTemplate 的使用提供了自动化配置类 JdbcTemplateAutoConfiguration

整合MyBatis

  • MyBatis 支持定制化 SQL、存储过程以及高级映射, MyBatis 几乎避免了所有的 JDBC 代码手动设置参数以及获取结果集
  • 在传统的SSM框架整合中 ,使用MyBatis需要大量的XML配置,而在 Spring Boot 中, MyBatis 官方 提供了一套自动化配置方案,可以做到 MyBatis 开箱即用

创建项目

创建 Spring Boot 项目,添加 MyBatis 依赖、数据库驱动依赖以及数据库连接池依赖

创建数据库、表、实体类等

在这里插入图片描述

  • 在项目的根包下面创建一个子包 Mapper, 在 Mapper 中创建 Book.Mapper
  • 有两种方式指明该类是一个 Mapper
    • 第一种,在 Book.Mapper 上添加 @Mapper 注解, 表明该接口是一个 MyBatis 中的 Mapper,这种方式需要在每一个 Mapper 上 都添加注解
    • 在配置类上添加@MapperScan(”org.sang.mapper")引主解, 表示扫描 org.sang.mapper 包下的所有接口作为 Mapper

创建 BookMapper.xml()

  • 在与 Boo刷apper 相同的位置创建 Book.Mapp巳r.xml 文件
  • 在这里插入图片描述
    可采用注解开发

创建 Service 和 Controller

配置 pom.xml 文件

  • 在 Maven 工程中 , XML 配置文件建议写在 resources 目录下

  • 上文的 Mapper.xml 文件写 在包下, Maven 在运行时会忽略包下的 XML 文件,因此需要在 pom.xml 文件中重新指明资源文件位置

       <build>  
       	<resources> 
       		<resource>  <directory>src/main/j ava</ directory> 
       		 	<includes> 
       		 		<include>**/* .xml</include> 
       		 	</includes> 
       		 </resource> 
       	<resource>
       		<directory>src/main/resources</directory> 
       			</resource> 
       				</resources> 
       	</build> 
    

整合SpringDataJPA

多数据源

  • 多数据源,是指Java EE 项目中采用了不同数据库实例中的多个库,或者同一个数据库实例中多个不同的库
  • 采用 MyCat 等分布式数据库中间件是比较好的解决方案,这 样可以把数据库读写分离、分库分表、备份等操作交给中间件去做, Java 代码只需要专注于业务
  • 同样可以使用 Java 代码解决类似的问题, 在SpringFramework中就可以配 置多数据源, SpringBoot继承其衣钵,只不过配置方式有所变化

JdbcTemplate 多数据源

  • JdbcTemplate 多数据源的配置是比较简单的, 因为一个 JdbcTemplate 对应一个 DataSource, 开 发者只需要手动提供多个 DataSource, 再手动配置 JdbcTemplate

Mybatis多数据源

JPA多数据源

Spring Boot 整合 NoSQL

NoSQL 是指非关系型数据库
- NoSQL 不使用 SQL 作为查询语言
- 其数据存储可以不需要固定的表格模式
- 一般都有水平可扩展性的特征
- 分类有 键值存储(Redis),列存储(HBase),文档型数据库(MongoDB)图形数据库(DEX)

整合 Redis

  • Redis 是一个使用 C 编写的基于内存的 NoSQL 数据库
  • Redis 由一个 Key/Value 映射的字典构成,Redis 中 Value 的类型不局限于字符串,还支持列表、集合、有序集合、散列等
  • Redis 不仅可以当作缓存使用,也可以配置数据持久化后当作 NoSQL 数据库使用,目前支持两种持久化方式: 快照持久化和 AOF 持久化
  • Redis 也可以搭建集群或者主从复制结构,在高并发环境下具有高可用性

整合SpringBoot

  • 创建 Spring Boot 项目,添加依赖

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值