Spring Boot 知识点及面试总结
0、什么是Spring Boot
Spring Boot 是 Spring 开源组织下的子项目,是Spring组件一站式的解决方案,主要是简化了使用Spring的难度,简化了繁重的配置,提供了各种启动器,开发者能快速上手
1、使用Spring Boot的优点以及核心功能有哪些
核心功能:
- springboot项目为独立运行的spring项目,可以通过打包命令行(java -jar xxx.jar)运行或直接运行main主函数
- 内嵌servlet容器(tomcat、jetty、undertow等容器)
- 提供了starter的pom文件配置,简化了maven的配置
- 自动配置spring容器中的bean,当不满足实际开发场景,可自动以bean的自动化配置
- 准生产的应用监控(基于: ssh , http , telnet 对服务器运行的项目进行监控.).
优点:
- 无需进行手动配置,简化配置,也无需通过代码生成来实现
- 能够独立运行
- 上手容易
- 内嵌servlet容器(tomcat、jetty、undertow等容器)
- 能够快速搭建项目
2、Spring Boot中的核心主函数作用及使用的注解
@SpringBootApplication
public class HelloWorldMainApplication{
public static void main(String [] args){
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
主函数作用: 主要用于启动spring boot框架,用于加载servlet容器和诸多的默认组件
@SpringBootApplication // 来标注一个主程序类,说明它是一个spring Boot的应用
3、Spring Boot 的核心注解是哪个,主要有哪几个注解组成的
@SpringBootApplication 是 Spring Boot 的核心注解,主要组合包含了以下三个注解:
@SpringBootConfiguration: 组合了@Configuration注解,实现配置文件的功能
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan: Spring组件扫描
4、Spring Boot的配置文件的格式有几种,区别是什么
Spring boot 主要有两种配置格式,.properties 和 .yml,它们的主要区别就是书写格式不一样,另外,yaml文件不支持 @PropertySource 注解导入配置
5、Spring Boot 的核心配置文件有几个,它们的区别是什么
Spring Boot主要有两个核心配置文件application和bootstrap
application 主要是用于spring Boot项目的自动化配置
bootstrap 配置文件有以下几个应用场景
- 使用Spring Cloud Config 配置中心时,此时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
- 一些固定不能被覆盖的属性
- 一些加密/解密的场景
6、Spring Boot 读取配置信息有哪几种方式
Spring Boot 可以用过**@Vule、@ConfigurationProperties、@PropertySource、@Environment** 来绑定变量
7、@Vule获取值和 @ConfigurationProperties 获取值的区别
@Vule 获取值需要一个一个指定变量值,并且只支持SpEL 表达式
@ConfigurationProperties 获取值的方式是批量注入配置文件中的属性,支持松散绑定(松散语法)、支持JSR303 数据校验和复杂类型的封装,不支持SpEL表达式
8、Spring boot 外部配置加载顺序
1、命令行参数 (所有的配置都可以在命令行进行配置)
java -jar xxx.jar --server.port=8089 --server.context-path=/test
2、来自java:comp/env 的JDNI 属性
3、java系统属性(system.getProperties())
4、操作系统环境变量
5、RandomValuePropertySource配置的random.* 属性值
…
9、Spring Boot 的自动配置原理是什么
注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置
10、如何查看哪些自动配置类是生效的
可以通过启用 debug=true 属性;来让控制台打印自动配置报告
11、Spring Boot 支持哪些日志框架,默认使用的是哪个
Spring Boot 支持Java Util Logging,log4j2,log4j,logback 作为日志框架,spring boot 默认是使用的是logback 日志框架
12、如何让系统中所有的日志进行统一到slf4j
1、将系统中其他日志框架先排除出去
2、用中间包来替换原有的日志框架
3、导入slf4j其他日志框架的实现
13、 Spring Boot 需要独立的容器运行吗
可以不需要,内嵌了tomcat、jetty、undertow等servlet容器
14、你如何理解Spring Boot 中的 Starters
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包, 如你想要使用Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters 包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。
15、如何在 Spring Boot 启动的时候运行发一些特定的代码
可以实现接口 ApplicationRunner 或者 CommanLineRunner,这两个接口实现方式都一样,它们都只提供了一个run方法。
16、Spring Boot 可以兼容老Spring 项目吗,如何做
可以兼容, 使用 @ImportResource 注解导入老 Spring 项目配置文件
17、Spring Boot 实现热部署有哪几种方式
主要有两种方式:
Spring Loaded
Spring-boot-devtools
18、Spring Boot 2.x 有什么新特性?与1.x有什么区别
配置变更
JDK版本升级
第三方类库升级
响应式 Spring 编程支持
HTTP/2 支持
配置属性绑定
19、Spring Boot 如何定义多套不同环境配置
application.properties
application-dev.properties
application-test.properties
application-prod.properties
在运行时指定具体的配置文件
20、@Value("#{}") 与 @Value("${}") 的区别
@Value("#{}")
表示Spel 表达式通常用来获取bean的属性,或者调用bean 的某个方法,还可以表示常量。
@Value("${}")
可以用来获取配置文件中定义的属性值
21、运行Spring Boot 有哪几种方式
- 打包成Fat Jar, 直接使用 java -jar 运行。目前主流做法
- 在IDEA 或者 Eclipse 中,直接运行应用的 Spring Boot 启动类的 main 主函数来启动。适用于开发调试场景
- 如果是web项目,可以打包成 war 包,使用外部 Tomcat 或 jetty 等容器
22、Spring Boot中的监视器是什么
Spring Boot actuator是Spring启动框架中的重要功能之一。Spring Boot监视器可帮助你访问生成环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。
23、Spring Boot常用的 Starter 有哪些
spring-boot-starter-web:提供 Spring MVC + 内嵌的servlet容器
spring-boot-starter-data-jpa:提供Spring JPA + Hibernate
spring-boot-starter-data-redis:提供redis
mybatis-spring-boot-starter:提供Mybatis
24、Spring Boot、Spring MVC和Spring 有什么区别
Spring是一个“引擎”
Spring MVC是基于Spring的一个MVC框架
Spring Boot是基于Spring的一套快速开发整合包