八股文:SpringBoot篇

2,740 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

一、为什么要用SpringBoot。

SpringBoot优点非常多,如:

1. 独立运行。

SpringBoot内嵌了各种servlet容器,Tomcat、Jetty等,现在不在需要打成war包部署到容器中,SpringBoot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。

2. 简化配置。

spring-boot-starter-web启动器自动依赖其他组件,减少了maven的配置。

3. 自动配置。

SpringBoot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。

4. 无代码生成和XML配置。

SpringBoot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。

5. 应用监控。

SpringBoot提供一系列端点可以监控服务及应用,做健康检测。

二、SpringBoot的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是SpringBoot的核心注解,主要组合包含了以下3个注解:

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})。
  • @ComponentScan:Spring组件扫描。

三、运行SpringBoot有哪几种方式?

  1. 打包命令或者放到容器中运行。
  2. 用Maven/Gradle插件运行。
  3. 直接执行main方法运行。

四、如何理解SpringBoot中的Starters?

Starters是什么:

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找实例代码和依赖包。如你想使用SpringJPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

Starters命名:

SpringBoot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型。第三方的启动器不能以spring-boot开头命名,它们都被SpringBoot官方保留。一般一个第三方的应该这样命名,像mybatis的mybatis-spring-boot-starter。

Starters分类:

1.SpringBoot应用类启动器。

启动器名称功能描述
spring-boot-starter包含自动配置、日志、YAML的支持
spring-boot-starter-web使用SpringMVC构建web工程,包含restful,默认使用Tomcat容器。
......

2.SpringBoot生产启动器。

启动器名称功能描述
spring-boot-starter-actuator提供生产环境特性,能监控管理应用。

3.SpringBoot技术类启动器。

启动器名称功能描述
spring-boot-starter-json提供对JSON的读写支持。
spring-boot-starter-logging默认的日志启动器,默认使用Logback。
......

4.其他三方启动器。

启动器名称功能描述
......

五、如何在SpringBoot启动的时候运行一些特定的代码?

如果你想在SpringBoot启动的时候运行一些特定的代码,你可以是实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。

CommandLineRunner:启动获取命令行参数

六、SpringBoot需要独立的容器运行吗?

可以不需要,内置了Tomcat/Jetty等容器。

七、SpringBoot中的监视器是什么?

SpringBootActuator是Spring启动框架中的重要功能之一。SpringBoot监视器可以帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员出发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。

八、如何使用SpringBoot实现异常处理?

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

九、你如何理解SpringBoot中的Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。

十、SpringBoot常用的Starter有哪些?

spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持

spring-boot-starter-data-jpa 数据库支持

spring-boot-starter-data-redis redis数据库支持

spring-boot-starter-data-solr solr支持

mybatis-spring-boot-starter 第三方的mybatis集成starter

十一、SpringBoot实现热部署有哪几种方式?

主要有两种方式:

  • Spring Loaded
  • Spring-boot-devtools

十二、如何理解 Spring Boot 配置加载顺序?

在 Spring Boot 里面,可以使用以下几种方式来加载配置。

  1. properties文件。
  2. YAML文件。
  3. 系统环境变量。
  4. 命令行参数
  5. 等等...

十三、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

  • 使用 Spring Cloud Confifig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
  • 一些固定的不能被覆盖的属性。
  • 一些加密/解密的场景。

十四、如何集成 Spring Boot 和 ActiveMQ?

对于集成 Spring Boot 和 ActiveMQ,我们使用 spring-boot-starter-activemq 依赖关系。 它只需要很少的配置,并且不需要样板代码。