Java Spring Boot面试题解析

本文详细介绍了SpringBoot的特性,如独立运行、简化配置、自动配置和应用监控,以及SpringBootStarter的作用和常见Starter。还对比了Spring、SpringMVC和SpringBoot的关系,并讨论了配置文件、运行方式、多环境配置和自动配置原理。
摘要由CSDN通过智能技术生成

1. 什么是 Spring Boot?【重点】

多年来,随着新功能的增加,Spring变得越来越复杂;一个Spring项目,我们必须做添加构建路径或添加Maven依赖关系,配置应用程序服务器,添加Spring配置等工作;因此,创建一个Spring项目需要很多配置,过程复杂。

Spring Boot是解决这个问题的方法,建立在现有Spring框架之上,避免了之前我们必须做的所有模板代码和配置;Spring Boot帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。

2. Spring Boot有哪些优点?【重点】

独立运行:

Spring Boot而且内嵌了各种Servlet容器(Tomcat、Jetty)等,现在不再需要打成WAR包部署到容器中,Spring Boot只要打成一个可执行的JAR包就能独立运行,所有的依赖包都在一个JAR包内。

简化配置:

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

自动配置:

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

无代码生成和XML配置:

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

应用监控:

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

3. Spring Boot Starter作用是什么?有哪些常见的Starter?【了解】

当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多artifacts了;这时候Spring Boot Starter就派上用处了,每一个Stater都在扮演着提供我们所需的Spring特性的一站式角色,其所需的依赖以一致的方式注入并且被管理。

常用的Starter:

spring-boot-starter:SpringBoot核心Starter,包括自动化配置支持,日志以及YAML等;

spring-boot-starter-aop:使用Spring AOP和AspectJ相关切面编程的Starter;

spring-boot-starter-data-redis:使用Spring data redis的Starter;

spring-boot-starter-jdbc:使用JDBC连接池的Starter;

spring-boot-starter-security:使用Spring安全的Starter;

spring-boot-starter-test:使用测试相关的Starter;

spring-boot-starter-web:构建RESTFUL、Spring MVC的Web应用程序的Starter。

4. Spring Boot、Spring MVC和Spring有什么区别?【重点】

分别描述各自的特征:

Spring框架就像一个家族,有众多衍生产品例如Boot、Security、JPA等等;但他们的基础都是Spring 的IOC和AOP,IOC提供了依赖注入的容器,AOP解决了面向切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC提供了一种轻度耦合的方式来开发Web应用;它是Spring的一个模块,是一个Web框架;通过DispatcherServlet、ModelAndView和View Resolver,开发Web应用变得很容易;解决的问题领域是网站应用程序或者服务开发等。

Spring Boot实现了Auto-configuration自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具;同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用。

所以,用最简练的语言概括就是:

Spring是一个“引擎”;

Spring MVC是基于Spring的一个MVC框架;

Spring Boot是基于Spring的一套快速开发整合包。

5. Spring Boot的核心配置文件有哪几个?它们的区别是什么?【重点】

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

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

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

使用 Spring Cloud Config配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

一些固定的不能被覆盖的属性;

一些加密/解密的场景。

6. Spring Boot的配置文件有哪几种格式?它们有什么区别?【了解】

properties和yml,它们的区别主要是书写格式不同:

properties:

app.user.name = javastack

yml:

app:user :name: javastack

yml格式不支持 @PropertySource 注解;

properties配置文件优先级高于yml配置文件。

7. Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?【重点】

Spring Boot的核心注解是@SpringBootApplication,使用在启动类上,主要组合包含3个注解:

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

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,

如关闭数据源自动配置功能:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

@ComponentScan:Spring组件扫描。

8. 运行Spring Boot应用程序有哪几种方式?【重点】

打成JAR包使用命令运行或者打成War发布到容器中运行;

使用Maven命令运行Spring Boot项目:mvn spring-boot:run。

直接执行应用程序的main方法运行。

9. Spring Boot如何实现热部署?【掌握】

引用Devtools依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
自定义配置热部署:
热部署开关,false即不启用热部署
spring.devtools.restart.enabled=true
指定热部署的目录
spring.devtools.restart.additional-paths:=src/main/java
指定目录不更新
spring.devtools.restart.exclude= test/**
如果是idea,需要更改以下两个地方配置:
设置自动编译:
File > Settings > Compiler-Build Project automatically
注册项目运行时允许自动编译:
ctrl + shift + alt + / > Registry > 勾选Compiler autoMake allow when app running
生产环境Devtools将被禁用;
打包应用默认不会包含Devtools,除非你禁用Spring Boot Maven插件的Exclude Devtools属性;
Thymeleaf无需配置spring.thymeleaf.cache:false,Devtools默认会自动设置。

10. Spring Boot支持哪些日志框架?默认的日志框架是哪个?【了解】

Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,Spring Boot使用Logback作为默认日志框架。

Spring-boot-starter启动器包含Spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

11. Spring Boot如何定义多套不同环境配置?【重点】

Spring Boot可以使用多profile方式实现定义多套不同环境配置文件。
applcation.properties:默认配置文件,此文件需要指定使用哪一个profile;
application-dev.properties:开发环境配置文件:
application-test.properties:测试环境配置文件;
application-prod.properties:生产环境配置文件。
如果使用YAML格式,可以使用一个配置文件来实现:
spring:
profiles: 
    active: prod
---
spring: 
profiles: prod
server: 
port: 8080  
---
spring: 
profiles: test  
server: 
port: 8081
使用Java代码指定profile:
@Configuration @Profile("prod")
public class ProductionConfiguration {}
运行时指定Profile:
main方法启动方式:
--spring.profiles.active=prod
插件启动方式:
mvn spring-boot:run -Drun.profiles=prod
jar运行方式:
java -jar xx.jar --spring.profiles.active=prod
启动类中指定profile,添加如下方法:
public void setAdditionalProfiles(String... profiles) {
    this.additionalProfiles = new LinkedHashSet<String>(Arrays.asList(profiles));
}

12. Spring Boot中的监视器是什么?【了解】

Spring Boot中的监视器是Spring Boot Actuator,是Spring框架中的重要功能之一;

Spring Boot Actuator可帮助您访问生产环境中正在运行的应用程序的当前状态;

Spring Boot Actuator可以帮助你监控系统数据的框架,可以查看应用配置的详细信息,如:应用程序的健康信息;应用程序基本信息;应用程序的HTTP Request跟踪信息;应用程序的Metrics信息;应用程序的@RequestMapping的路径信息;应用程序的各种配置信息;应用程序的请求的次数、时间、等各种信息。

13. Spring Boot自动配置的原理是什么?【重点】

Spring Boot启动的时候通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中所有的自动配置类,并对其进行加载;

这些自动配置类的类名都是以AutoConfiguration结尾来命名的,它实际上就是一个Spring容器配置类,它们都有一个@EnableConfigurationPerperties的注解,通过这个注解启动以Properties为后缀的类去加载全局配置中的属性;

以Properties为后缀的类通过@ConfigurationProperties注解将全局配置文件中的属性与自己的属性进行绑定。

14. Spring Boot配置加载顺序?【重点】

properties文件;

YAML文件;

系统环境变量;

命令行参数。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值