自Spring Boot诞生以来,就引发了业界轰动,目前愈来愈多的公司技术选型选择拥抱Spring Boot。因此Spring Boot也成为面试必问的问题之一。接下来小胖哥总结了一些来开阔你的思路。html
好了接下来直奔主题说说常常在面试中问到的 **Spring Boot **面试题web
Spring Framework提供了多种功能,使Web应用程序的开发更加容易。这些功能包括依赖注入,数据绑定,面向方面的编程,数据访问等等。
随着Spring社区的壮大,Spring慢慢变得愈来愈复杂,再也不像开始宣称的那么轻量级。 开发应用程序的配置量愈来愈大令开发者头疼。这时Spring Boot就派上用场了 - 它采用“约定大于配置”的思想简化了配置,对Spring提供的功能和配置并且将一些功能抽象成为“Starter”开箱即用、按需引用。极大地简化了开发。面试
咱们能够像在任何其余库中同样在Maven项目中包含Spring Boot。可是,最好的方法是从spring-boot-starter-parent
项目继承并声明依赖于Spring Boot启动器。这样作可让咱们的项目重用Spring Boot的默认设置。
继承spring-boot-starter-parent
项目很是简单 - 咱们只须要在 pom.xml
中指定一个 parent
元素:spring
咱们能够在Maven 中央仓库找到最新版本的 spring-boot-starter-parent
。
上面的方式很方便可是并不必定符合实际须要。例如公司要求全部项目依赖构建从一个标准BOM开始,咱们就不能按上面的方式进行。
在这种状况下,咱们能够进行以下引用:编程
而后在 dependencies
标签下引用Spring Boot 的starters 就好了。springboot
依赖管理对于项目相当重要。当项目足够复杂时,管理依赖项可能会变成一场噩梦,由于涉及的组件太多了。
这就是Spring Boot 的 starter
就派上用场了。每一个starter均可觉得咱们提供所须要的Spring技术的一站式服务。而且以一致的方式传递和管理其余所需的依赖关系。
全部官方starter都在 org.springframework.boot
组下,其名称以 spring-boot-starter-
开头 。非官方的starter的名称在前,如 mybatis-spring-boot-starter
。这种命名模式使得查找启动器变得很容易,尤为是在使用支持按名称搜索依赖关系的IDE时。可是这个不是绝对的,有些开发者可能不听从这种契约。
目前大概有超过50
种官方starter
。最经常使用的是:服务器
spring-boot-starter
: 核心启动器,包括自动配置支持,日志记录和YAMLspring-boot-starter-aop
: 使用Spring AOP
和AspectJ
进行面向方面编程的初学者spring-boot-starter-data-jpa
: 使用Spring Data JPA
和Hibernate
的启动器spring-boot-starter-jdbc
: 用于将JDBC
与HikariCP
链接池一块儿使用的启动器spring-boot-starter-security
: 使用Spring Security
的启动器spring-boot-starter-test
: 用于测试Spring Boot
应用程序的启动器spring-boot-starter-web
: 使用Spring MVC
构建Web的启动器,包括RESTful
应用程序其余starter 可去spring.io查询mybatis
若是咱们要禁用特定的自动配置,咱们可使用@EnableAutoConfiguration
注解的exclude
属性来指示它。以下禁用了数据源自动配置DataSourceAutoConfiguration
:app
若是咱们使用@SpringBootApplication
注解。 它具备@EnableAutoConfiguration
做为元注解 - 咱们一样能够配置exclude属性来禁用自动配置:maven
咱们还可使用spring.autoconfigure.exclude
环境属性禁用自动配置。在application.properties
(也能够是application.yml
)配置文件设置以下也能够达到一样的目的:
要注册自动配置类,咱们必须在META-INF / spring.factories
文件的EnableAutoConfiguration
键(key)下列出其彻底限定名称,若是是多个按照如下风格配置:
若是咱们使用Maven构建一个项目,那么该文件应放在resources / META-INF
目录中。
使用@Conditional
系列注解。 例如@ConditionalOnMissingBean
。此注释的最显着属性是:
value
:要检查的bean类型name
:要检查的bean的名称@Bean
装饰的方法上时,目标类型默认为方法的返回类型:表示的意思是若是不存在CustomService
类型的bean则初始化并注入该bean。
传统上,咱们将Web应用程序打包为WAR文件,而后将其部署到外部服务器中。这样作可让咱们在同一台服务器上安排多个应用程序。在CPU和内存稀缺的时候,这是节省资源的好方法。
但事情发生了变化。如今计算机硬件至关便宜,而且注意力转向服务器配置。在部署期间配置服务器的一个小错误可能会致使灾难性后果。
Spring经过提供一个插件即spring-boot-maven-plugin
来解决这个问题,将Web应用程序打包为可执行的JAR
。要包含此插件,只需向pom.xml
添加一个插件元素:
有了这个插件,咱们将在执行包阶段后获得一个fat JAR
。此JAR包含全部必需的依赖项,包括嵌入式服务器。所以,咱们再也不须要担忧配置外部服务器。
而后咱们能够像运行普通的可执行JAR
同样运行应用程序。
请注意,必须将pom.xml
文件中的packaging
元素设置为 jar
才能构建JAR
文件:
若是咱们不包含这个元素,它也默认为jar
。
若是咱们想要构建WAR
文件,请将包装 元素更改成war
:
并将容器依赖关系从打包文件中删除:
执行Maven 包阶段后,咱们将拥有一个可部署的WAR
文件。
能够实现接口 ApplicationRunner
或者者 CommandLineRunner
,这两个接口实现方式同样,它们都只提供了一个 run
方法。更加详细的操做参见我公众号:Felordcn
中的相关文章。
Spring Boot支持外部配置,容许咱们在各类环境中运行相同的应用程序。咱们可使用properties
文件,YAML文件
,环境变量,系统属性和命令行选项参数来指定配置属性。
而后,咱们能够访问使用这些属性@Value注释,经由绑定对象 的@ConfigurationProperties
注释或Environment
环境抽象类注入。
如下是最多见的外部配置来源:
-server.port = 8080
。Spring Boot将全部参数转换为属性,并将它们添加到环境属性集中。application.properties
文件或其YAML
对应文件加载的属性。默认状况下,Spring Boot会在当前目录,类路径根或其config
子目录中搜索此文件。application- {profile} .properties
文件或其YAML
对应文件加载。{profile}
占位符是指活性轮廓。这些文件与非特定属性文件位于相同位置,而且优先于非特定属性文件。在为Spring应用程序运行集成测试时,咱们必须有一个ApplicationContext
。
为了简化测试,Spring Boot为测试提供了一个特殊的注释 @SpringBootTest
。此批注从其classes
属性指示的配置类建立ApplicationContext
。
若是未设置classes属性,Spring Boot将搜索主配置类。搜索从包含测试的包开始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注释的类。
请注意,若是咱们使用JUnit 4
,咱们必须用@RunWith(SpringRunner.class)
装饰测试类。能够查阅 文章Spring Boot 2 实战:mock测试你的web应用。
Spring Boot Actuator
能够帮助你监控和管理Spring Boot应用,好比健康检查、审计、统计和HTTP追踪等。全部的这些特性能够经过JMX
或者HTTP endpoints
来得到。
Actuator同时还能够与外部应用监控系统整合,好比 Prometheus
, Graphite
, DataDog
, Influx
, Wavefront
, New Relic
等。这些系统提供了很是好的仪表盘、图标、分析和告警等功能,使得你能够经过统一的接口轻松的监控和管理你的应用。Actuator
使用Micrometer
来整合上面提到的外部应用监控系统。这使得只要经过很是小的配置就能够集成任何应用监控系统。
将Spring Boot Actuator集成到一个项目中很是简单。咱们须要作的就是在pom.xml
文件中包含 spring-boot-starter-actuator
启动器:
Spring Boot Actuator
可使用HTTP
或JMX
端点公开操做信息。可是,大多数应用程序都使用HTTP
,其中端点的标识和/执行器前缀造成URL
路径。
如下是Actuator提供的一些最多见的内置端点:
auditevents
: 公开审计事件信息env
: 公开环境属性health
: 显示应用程序运行情况信息httptrace
: 显示HTTP跟踪信息info
: 显示任意应用程序信息metrics
: 显示指标信息mappings
: 显示全部@RequestMapping路径的列表scheduledtasks
: 显示应用程序中的计划任务threaddump
: 执行线程转储更多关于Spring Boot Actuator
的信息可查看Spring Boot 2.x 中的 Actuator 。
请注意:生产使用Actuator务必保护好这些端点,避免未受权的访问请求。
今天小胖哥介绍了在技术面试中常常遇到的一些关于Spring Boot的最关键问题。掌握以上的知识在平常开发中也是必要的,但愿对你的面试有所帮助。