Springboot

目录

Spring Boot 有哪些优点?

什么是 YAML?YAML 配置的优势在哪里 ?

spring boot 核心的两个配置文件:

如何实现 SpringBoot 应用程序的安全性?

什么是 CSRF 攻击? 

什么是 FreeMarker 模板?

spring-boot-starter-parent 有什么用 ?

Spring Boot 实现异常处理?

微服务中如何实现 session 共享 ?

Spring Boot中如何实现定时任务 ? 

SpringBoot 中怎么禁用某些自动配置特性?

如何开启 SpringBoot?开启SpringBoot特性有哪几种方式?

Spring Boot 中如何解决跨域问题 ?

springboot解决post请求中文乱码问题

Spring Boot 自动配置原理是什么?

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成


什么是Spring Boot?它和Spring有什么不同?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

SpringBoot本质还是Spring,只是一种简化使用Spring的方式。

Spring Boot 有哪些优点?

  1. 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
  2. 开箱即用,远离繁琐的配置。
  3. 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
  4. 没有代码生成,也不需要XML配置。
  5. 避免大量的 Maven 导入和各种版本冲突。

什么是 YAML?YAML 配置的优势在哪里 ?

YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与properties文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

YAML 现在可以算是非常流行的一种配置文件格式了。它的优势主要有:

  1. 配置有序,在一些特殊的场景下,配置有序很关键
  2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
  3. 简洁

spring boot 核心的两个配置文件:

  1. bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
  2. application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

如何实现 SpringBoot 应用程序的安全性?

使用安全框架

为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

Spring Security 是一个重量级的安全管理框架,概念复杂,配置繁琐,功能强大。

什么是 CSRF 攻击? 

CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

解决方法:在请求地址中添加 token 并每次验证

什么是 FreeMarker 模板?

FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用freemarker 可以将这些结合起来,给出最终的输出页面。

spring-boot-starter-parent 有什么用 ?

我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,主要有如下作用:

  1. 定义了 Java 编译版本为 1.8 。
  2. 使用 UTF-8 格式编码。
  3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
  4. 执行打包操作的配置。
  5. 自动化的资源过滤。
  6. 自动化的插件配置。
  7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

Spring Boot 实现异常处理?

AOP思想,Spring提供了一种使用ControllerAdvice 处理异常的非常有用的方法,我们只要通过实现一个ControllerAdvice类,来处理控制器类抛出的所有异常。

定义一个列,加上@ControllerAdvice注解,标记为一个全局异常处理类,并交给spring管理,记得要让spring启动时扫描到这个类,然后可以写不同的方法,加上@ExceptionHandler注解,再标记一下要拦截的异常种类,比如空指针,索引越界,也可以是自定义的异常,然后在方法里写具体的处理逻辑,比如返回什么信息,什么提示等等。

微服务中如何实现 session 共享 ?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

Spring Boot中如何实现定时任务 ? 

定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

SpringBoot 中怎么禁用某些自动配置特性?

有 3 种方法。如果我们想禁用某些自动配置特性,可以使用 @EnableAutoConfiguration 或 @SpringBootApplication 注解的 exclude 属性来指明,或者直接在配置文件中指定,例子如下:

// 方案 1,下面的代码段是使 DataSourceAutoConfiguration 无效:@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)public class MyConfiguration {}// 方案 2@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class MyConfiguration { }// 方案 3,在yml配置文件中配置spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

如何开启 SpringBoot?开启SpringBoot特性有哪几种方式?

1)继承spring-boot-starter-parent项目

2)导入spring-boot-dependencies项目依赖

运行 Spring Boot 有哪几种方式?

1)打包用命令或者者放到容器中运行

2)用 Maven/ Gradle 插件运行

3)直接执行 main 方法运行

Spring Boot 中如何解决跨域问题 ?

浏览器的同源策略会导致导致不能向其他域发送异步请求。

  1. @CrossOrigin注解   
  2. GateWay网关解决

在每个Controller类上@CrossOrigin注解,可以解决跨域问题;

我们可以看到 @CrossOrigin 注解里面有几个常用的属性:

1、String[] origins:设置允许来源域名的列表;

2、String[] allowedHeaders:设置跨域请求中允许的请求头的字段类型;

3、String[] exposedHeaders:设置请求头的一些字段信息;

4、RequestMethod[] mehotds:跨域请求中支持的HTTP请求类型;

5、String allowCredentials:设置跨域请求中Response头中的’Access-Control-Allow-Credentials’字段值;

6、long maxAge:设置预检请求响应的缓存持续最大时间;

或者在application.yml里配置:

springcloud:  

        gateway:  

                globalcors:  

                cors-configurations:  

                '[/**]': # 匹配所有请求  

                #跨域处理 允许所有的域  

                allowedOrigins: "*"

                # 支持的方法  

                allowedMethods:

                        - GET

                         - POST

                         - PUT  

                        - DELETE

springboot解决post请求中文乱码问题

注解里配置
@RequestMapping(value="/find",produces="text/plain;chartset=UTF-8")

Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心。

@EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。

总结,@EnableAutoConfiguration 作用
从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中EnableAutoConfiguration key对应的配置项加载到spring容器
只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置
@EnableAutoConfiguration还可以进行排除,排除方式有2中,一是根据class来排除(exclude),二是根据class name(excludeName)来排除
其内部实现的关键点有
1)ImportSelector 该接口的方法的返回值都会被纳入到spring容器管理中
2)SpringFactoriesLoader 该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置
从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器
只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置
@EnableAutoConfiguration还可以进行排除,排除方式有2中,一是根据class来排除(exclude),二是根据class name(excludeName)来排除
其内部实现的关键点有
1)ImportSelector 该接口的方法的返回值都会被纳入到spring容器管理中
2)SpringFactoriesLoader 该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置。

Spring Boot 的核心注解是哪个?它主要由哪几个注解组成

启动类上面的注解是@SpringBootApplication ,它也是 Spring Boot 的核心注解,包含了以下 3 个注解:

@SpringBootConfiguration :组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration :打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan :Spring组件扫描。

当你点击 @springbootConfiguration 的时候,会发现这也是一个组合注解,里面有一个 @Configuration 注解,这个注解表示这个类是一个 spring 的一个配置类;

在点击@Configuratin,会发现它也是一个组合注解,里面有一个 @Component 注解,这个注解表示这个 spring 的配置类是 spring 的一个组件;

你可能感兴趣的:(Spring,spring,boot,java,spring)