1.什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重 xml 的配置,提供了各种启动器,在运行过程中自定配置,开发者能快速上手。

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

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

  • application 配置文件主要用于 Spring Boot 项目的自动化配置。
  • bootstrap 配置文件有以下几个应用场景。
    • 使用 SpringCloudConfig 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
    • 一些固定的不能被覆盖的属性;
    • 一些加密 / 解密的场景;

3.Spring Boot 的配置文件有哪几种格式?它们有什么区别?

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

另外,.yml 格式不支持 @PropertySource 注解导入配置。

当三种文件同时存在时,其实三个文件中的配置信息都会生效,但是当三个文件中有配置信息冲突时,加载顺序是yml>yaml>properties

  • 所以优先级是:properties>yaml>yml,后加载的会覆盖先加载的文件

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

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

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


5.运行 SpringBoot 有哪几种方式?

1)打包用命令或者放到容器中运行

2)用 Maven/ Gradle 插件运行,Maven 是一个项目管理工具,可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。

3)直接执行 main 方法运行

6.SpringBoot 需要独立的容器运行吗?

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

7.开启 SpringBoot 特性有哪几种方式?

1)继承spring-boot-starter-parent项目
2)导入spring-boot-dependencies项目依赖

8.Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下是否有这个类去自动配置。

具体的是去 maven 中读取每个 starter 中的 spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean

9.你如何理解 Spring Boot 中的 Starters?

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

Starters 包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

10.Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量

11.Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,如果你使用 Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

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

12. SpringBoot 实现热部署有哪几种方式?

Spring Loaded

Spring-boot-devtools

把下面的依赖项添加至你的 Spring Boot Project pom.xml 中

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <scope>runtime</scope>
</dependency>

重启应用程序,然后就可以了。

13.Spring Boot 如何定义多套不同环境配置?

提供多套配置文件,按照 application-xxx.properties 格式建立文件,并在 application.properties 中指定

然后读取指定文件
资源目录下建立 config/db-config.properties:
@PropertySource(value = { “config/db-config.properties” })

14.Spring Boot 可以兼容老 Spring 项目吗,如何做?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

15.Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  • 配置变更
  • JDK 版本升级
  • 第三方类库升级
  • 响应式 Spring 编程支持
  • HTTP/2 支持
  • 配置属性绑定

16.SpringBoot 中的定时任务如何实现?

通过配置注解 @EnableScheduline 来开启对计划任务的支持,然后再要执行的任务上加注解 @Scheduled

spring 通过 @Scheduled 支持多种类型计划任务,包含 cron,fixDelay、fixRate (固定时间执行)

17.说说 SpringBoot 中的 SpringData 和 JPA

SpringData 是一个用于简化数据库访问,并支持云服务的开源框架。支持非关系型数据库 (NoSQL) 和 关系型数据库。其主要目的是使数据库的访问变得方便快捷。

SpringData JPA 是由 Spring 提供的简化 JPA 开发的框架,致力于减少数据访问层的开发量。

无论是 SQL 还是 NOSQL 数据库,Spring Boot 默认采用整合 Spring Data 的方式进行统一处理,添加大量自动配置,屏蔽了很多设置。引入各种 xxxTemplate,xxxRepository 来简化我们对数据访问层的操作。对我们来说只需要进行简单的设置。

18.创建一个springboot项目

手动设置一个 maven 项目

这里有几个重要的步骤:

在 Eclipse 中,使用文件 - 新建 Maven 项目来创建一个新项目

添加依赖项。

添加 maven 插件。

添加 Spring Boot 应用程序类。

19.我们能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?

在 spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

20.如何使用 Spring Boot 部署到不同的服务器?

你需要做下面两个步骤:

在一个项目中生成一个 war 文件。

将它部署到你最喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on)。

21.springboot 自动配置的原理

在 spring 程序 main 方法中 添加 @SpringBootApplication 或者 @EnableAutoConfiguration
会自动去 maven 中读取每个 starter 中的 spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean

22.如何修改 springboot 启动端口

springboot 使用一个全局的配置文件 application.properties,或者是 application.yml,放到 src/main/resources 目录,或者是类路径 /config 下,application.properties 文件中可以配置 springboot 的各种配置,项目启动的时候会默认加载配置文件并替换默认配置

可以设置application.properties的配置文件

server.port=[新的端口号]

23.SringBoot启动流程

启动run函数即启动springboot,run函数主要包含以下操作:

  1. 创建了应用的监听器 SpringApplicationRunListeners 并开始监听
  2. 加载 SpringBoot 配置环境 (ConfigurableEnvironment),如果是通过 web 容器发布,会加载 StandardEnvironment,其最终也是继承了 ConfigurableEnvironment
  3. 配置环境 (Environment) 加入到监听器对象中 (SpringApplicationRunListeners)
  4. 创建 run 方法的返回对象:ConfigurableApplicationContext (应用配置上下文)
  5. 回到 run 方法内,prepareContext 方法将 listeners、environment、applicationArguments、banner 等重要组件与上下文对象关联
  6. 接下来的 refreshContext (context) 方法 将是实现 spring-boot-starter-*(mybatis、redis 等) 自动化配置的关键,包括 spring.factories 的加载,bean 的实例化等核心工作。

配置结束后,Springboot 做了一些基本的收尾工作,返回了应用环境上下文。回顾整体流程,Springboot 的启动,主要创建了配置环境 (environment)、事件监听 (listeners)、应用上下文 (applicationContext),并基于以上条件,在容器中开始实例化我们需要的 Bean


【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐