什么是 Spring Boot
Spring Boot是Spring开源组织下的一个子项目,是Spring组件一站式解决方案。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot其实就是一个整合很多可插拔的组件(框架),内嵌了使用工具(比如内嵌了Tomcat、Jetty等),方便开发人员快速搭建和开发的一个框架。
更多 Spring Boot 详细介绍请看这篇文章《SpringBoot是什么?》。
Spring Boot的优势
- 创建独立的Spring应用程序
- 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
- 提供自以为是的“入门”依赖项,以简化构建配置
- 尽可能自动配置Spring和3rd Party库
- 提供可用于生产的功能,例如指标,运行状况检查和外部化配置
- 完全没有代码生成,也不需要XML配置
Spring Boot的核心配置文件有哪几个?其区别是?
核心配置文件有application 和 bootstrap配置文件。
- application:主要用于Spring Boot项目的自动化配置。
- bootstrap:①、使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;②、一些固定的不能被覆盖的属性;③、一些加密/解密的场景;
bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。
具体请看这篇文章《Spring Boot 核心配置文件详解》。
Spring Boot 的配置文件有哪几种格式?它们有什么区别?
.properties 和 .yml,它们的区别主要是书写格式不同。
另外,.yml 格式不支持 @PropertySource
注解导入配置。
什么是 Spring Profiles?
Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。
因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在生产环境中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
核心注解是:@SpringBootApplication
主要组合包含了以下 3 个注解:
- @SpringBootConfiguration:组合了@Configuration注解,实现配置文件功能;
- @EnableAutoConfiguration:打开自动配置功能;
- @ComponentScan:Spring注解扫描。
开启 Spring Boot 特性有哪几种方式?
1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖
具体请参考这篇文章《Spring Boot开启的2种方式》。
运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
在SpringBoot的应用的根目录下运行mvn spring-boot:run
3)直接执行 main 方法运行
Spring Boot 自动配置原理是什么?
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。
在springboot项目启动的时候,通过@SpringBootApplication —>@EnableAutoConfiguration —> @Import(AutoConfigurationImportSelector.class),注解找到 META-INF/spring.factories 配置文件中的所有自动配置类,并对其进行加载。而这些自动配置类都是以 AutoConfiguration 结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
具体看这篇文章《Spring Boot自动配置原理、实战》、《Spring Boot面试杀手锏————自动配置原理》。
Spring Boot 中的 starter 到底是什么 ?
首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter。
Spring Boot 有哪几种读取配置的方式?
Spring Boot 可以通过
@PropertySource,@Value,@Environment, @ConfigurationProperties
来绑定变量,
具体请看这篇文章《Spring Boot读取配置的几种方式》。
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。
具体请看这篇文章《Spring Boot日志集成》。
Spring Boot 配置加载顺序?
在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1)properties文件;
2)YAML文件;
3)系统环境变量;
4)命令行参数;
等等……
具体请看这篇文章《Spring Boot 配置加载顺序详解》。
Spring Boot 可以兼容老 Spring 项目吗,如何做?
可以兼容,使用 @ImportResource
注解导入老 Spring 项目配置文件。
Spring Boot 是否可以使用 XML 配置 ?
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource
注解可以引入一个 XML 配置。
Springboot 中的 javaConfig(基于Spring5.2)
JavaConfig就是使用注解来描述Bean配置的组件,是Spring开源组织下的一个子项目。提供了配置spring IOC容器的纯java方法。有助于避免使用XML配置。
使用优点:
- **面向对象的配置:**javaConfig定义为一个配置类,则可以继承,重写其@Bean方法等;
- **减少或消除XML配置:**基于依赖注入原则的外化配置的好处已被证明,只使用JavaConfig配置类来配置容器是可行的;
- **类型安全和重构友好:**Java5.0对泛型的支持,已经实现自动扫描,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。
Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。
Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。
如何使用 Spring Boot 实现异常处理?
Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControllerAdvice 类,来处理控制器类抛出的所有异常。或者使用@ControllerAdvice或@RestControllerAdvice注解来编写一个全局异常管理器。
Spring Boot 中如何实现定时任务 ?
定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。
在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。
Spring Boot 中的监视器是什么?
Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。
比较一下Spring Security和Shiro各自的优缺点
Security在Spring Boot中有其Starter,使其在Spring Boot项目中容易上手。
- Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架;
- Spring Security 概念复杂,配置繁琐;Shiro 概念简单,配置简单;
- Spring Security 功能强大;Shiro简单。
友情参考:
Spring Boot 必问面试题精选
未完待续。。。