Java面试题(七)–Spring Boot

1、Spring Boot提供了哪些核心功能?(高频)

1、jar包方式运行

通过引入spring-boot-maven-plugin插件可以将springboot项目打包成一个可以直接运行的jar包,运行方式和常规jar包一样 java -jar

xxx.jar,启动后可以直接运行内嵌的web容器,根据具体引入的依赖来确定到底该启动哪种web容器。

2、使用了starter依赖

使用starter来封装依赖,简化项目引入相关依赖的复杂度

3、自动配置

springboot将spring4中的 @Condition注解发扬光大,根据特定的条件来创建相关的bean(如classpath下存在某个或者是某些类时自动创建某些spring bean),自动完成相关框架的自动配置。

2、你如何理解Spring Boot中的starter?

starter可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring及其他技术,而不需要到处找示例代码和依赖包。

如你想使用spring data redis访问Redis,只要加入spring-boot-starter-data-redis 启动器依赖就能使用了。starter包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

3、Spring Boot常用的starter有哪些?(高频)

1、spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)

2、spring-boot-starter-data-elasticsearch (es支持)

3、spring-boot-starter-data-redis (redis支持)

4、spring-boot-starter-amqp(消息队列支持)

5、spring-boot-starter-data-mongodb (mongodb的支持)

6、mybatis-plus-boot-starter(mybatis plus的支持)

7、mybatis-spring-boot-starter(mybatis的支持)

4、Spring Boot的配置文件有哪几种格式?(高频)

Spring Boot支持两种格式的配置文件:

1、application.properties

2、application.yml

在实际的项目开发一般的都是使用配置中心管理项目中的配置信息,常见的配置中心:Spring Cloud Config、Nacos

5、如何自定义Spring Boot应用程序的端口号?

方式一:在application.properties或者application.yml文件中添加 server.port配置项指定端口

方式二:在启动spring boot项目的时候通过 -Dserver.port参数指定项目的端口号

方式三:通过WebServerFactoryCustomizer设置端口号,如下所示

Java面试题(七)--Spring Boot

6、Spring Boot如何定义多套不同环境配置?

提供多套配置文件,如:

applcation.properties
application-dev.properties
application-test.properties
application-prod.properties

然后在applcation.properties文件中指定当前的环境 spring.profiles.active=test,这时候读取的就是application-test.properties文件。

7、Spring Boot有哪几种读取配置的方式?(高频)

Spring Boot 可以通过

1、@Value

2、Environment接口

3、@ConfigurationProperties

来绑定变量

8、如何重新加载Spring Boot上的更改,而无需重新启动服务器?(高频)

使用Spring Boot所提供的devtools工具就可以实现无需重新启动服务器而加载最新的代码。对应的工具的坐标如下所示:

Java面试题(七)--Spring Boot
如果使用的是idea开发工具,还需要做如下配置:
Java面试题(七)--Spring Boot
由于idea不会自动编译项目,所以源码修改不能被spring-boot-devtools检测到,勾选上面两个选项后idea将在窗口失去焦点时自动编译并替换源码文件。

9、Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?

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

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

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

​ 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

3、@ComponentScan:Spring组件扫描。

10、运行Spring Boot有哪几种方式?

方式一:直接通过java -jar xxx.jar的方式运行

方式二:将xxx.jar制作成Docker镜像,然后借助于Docker容器进行运行,并且可以使用docker-compose对多个容器进行统一编排

11、Spring Boot打成的jar和普通的jar有什么区别?

区别:

1、Spring Boot 项目最终打包成的jar是可执行jar,这种jar可以直接通过 java -jar xxx.jar 命令来运行,这种jar不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

2、Spring Boot 的jar无法被其他项目依赖,主要还是他和普通jar的结构不同。普通的jar包,解压后直接就是包名,包里就是我们的代码,而Spring Boot打包成的可执行jar解压后,在 \BOOT-INF\classes目录下才是我们的代码,因此无法被直接引用。

12、Spring Boot中如何实现定时任务?

在Spring Boot中可以使用两种定时任务框架:

1、Spring Task

2、Quartz

一般在项目中使用Spring Task就可以了,因为Spring Task是Spring框架提供的可以和Spring Boot进行无缝集成。具体的使用方式如下所示:

1、在启动类上使用 @EnableScheduling注解开启定时任务支持

2、在指定的方法上使用 @Scheduled注解来指定定时任务的执行规则, 如下所示:

13、怎么禁用某些自动配置特性?

如果我们想禁用某些自动配置特性,可以使用 @SpringBootApplication注解的exclude属性来指明。例如,下面的代码段是使

DataSourceAutoConfiguration无效:

Java面试题(七)--Spring Boot

14、Spring Boot项目的自动化配置原理是什么?(高频)

在Spring Boot项目中有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan其中@EnableAutoConfiguration是实现自动化配置的核心注解。该注解的源码如下所示:

Java面试题(七)--Spring Boot

该注解通过@Import注解导入AutoConfigurationImportSelector,这个类实现了一个导入器接口ImportSelector。在该接口中存在一个方法selectImports,如下所示:

Java面试题(七)--Spring Boot

该方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全类名。在AutoConfigurationImportSelector类中重写了这个方法,该方法内部就是读取了项目的classpath路径下 META-INF/spring.factories文件中的所配置的类的全类名。

如下所示:

Java面试题(七)--Spring Boot

在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

总结:在项目启动的时候,spring boot框架会自动读取META-INF/spring.factories配置文件中
org.springframework.boot.autoconfigure.EnableAutoConfiguration所配置的配置类,然后将其中所定义的bean根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

Original: https://www.cnblogs.com/xy1857/p/16557977.html
Author: Orator-xy
Title: Java面试题(七)–Spring Boot

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620456/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL系统变量和字符集

    书名《MySQL是怎样运行的:从根儿上理解MySQL》可自行百度 以下是知识点总结 重新认识Mysql MySQL是一个C/S架构的软件。 在Windows安装后首先注册成服务,然…

    数据库 2023年5月24日
    079
  • redis cluster和hash slot

    redis cluster介绍 从redis3.0.0开始,官方支持了redis cluster的集群模式,结束了redis没有集群的时代。 redis cluster 支撑 N …

    数据库 2023年6月9日
    0159
  • MySQL45讲之用户关注案例

    本文介绍 MySQL45 讲中提到的一个用户关注的案例,并记录下可行的处理方案。 业务背景 业务上有这样的需求,A、B两个用户,如果互相关注,则成为好友。存在两个表,关系(rela…

    数据库 2023年5月24日
    0145
  • Spring boot 项目配置 Maven 资源文件分离打包

    需要引入三个Maven插件: maven-jar-plugin:用于打包代码,并去除不需要一起打包的resource文件 maven-assembly-plugin:主要用来打压缩…

    数据库 2023年6月9日
    086
  • postman结合newman生成测试报告

    1. cmd窗口安装newman npm install -g newman 2. cmd窗口安装newman-html报告 nnpm install -g newman-repo…

    数据库 2023年6月14日
    0105
  • Java 多线程共享模型之管程(下)

    共享模型之管程 wait、notify wait、notify 原理 Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 B…

    数据库 2023年6月16日
    0121
  • 一段文字

    https://book.douban.com/review/13674387/现代人的困境,其实从出生开始每个人都有强烈的感受。我们会按户口管理,强调身份的是各种标签,各种统计数…

    数据库 2023年6月11日
    082
  • JDBC

    JDBC 一、JDBC概述 什么是JDBC? JDBC 是使用 Java 语言操作关系型数据库的一套 API。这套 API 是交由不同的数据库厂商实现的。我们利用 JDBC 编写操…

    数据库 2023年6月14日
    0114
  • 2022CNAS能力验证-存在性

    背景 警方接到报案称有人利用无人机投放非法宣传材料,根据线索找到一处住宅,搜查发现无人机、智能电视机、小型网络设备等电子设备,提取了电子设备数据并对网络设备进行了抓包分析。现委托你…

    数据库 2023年6月11日
    076
  • 关于Mysql索引的数据结构

    索引的数据结构 1、为什么使用索引 概念: 索引是存储索引用于快速找到数据记录的一种数据结构,就好比一本书的目录部分,通过目录中对应的文…

    数据库 2023年5月24日
    0100
  • 小试牛刀:Go 反射帮我把 Excel 转成 Struct

    背景 起因于最近的一项工作:我们会定义一些关键指标来衡量当前系统的健康状态,然后配置对应的报警规则来进行监控报警。但是当前的报警规则会产生大量的误报,需要进行优化。我所负责的是将一…

    数据库 2023年6月6日
    0100
  • Java面向对象程序设计(1)类与对象

    类与对象 类和对象的联系 类是抽象的,是由程序员对一种事物进行抽象而构造的一种数据类型 对象是具体的,它是类的一个实例化 类是对象的模板,对象是类中的一个个体 类和对象的内存分配机…

    数据库 2023年6月16日
    078
  • 页面静态化

    网站的首页频繁被访问,为了提升访问速度,除了我们之前已经学过的使用缓存技术外,还可以使用页面静态化技术。 页面静态化即将动态渲染生成的页面结果保存成html文件,放到静态文件服务器…

    数据库 2023年6月14日
    085
  • 数据库设计案例

    简单构建设计数据库 数据库设计案例 描述:简单构建设计数据库 sql代码实现 /* 数据库设计案例 */ — 音乐表 CREATE TABLE Music ( title VAR…

    数据库 2023年6月16日
    0117
  • idea 自定义注释模板

    自定义的格式: html;gutter:true; * * * @Description * $param$ * @Author $user$ * @Date $time$ $da…

    数据库 2023年6月16日
    069
  • 数字图像处理—检测交通视频中运动目标的程序设计

    初始条件: (1)数字图像处理的基本理论学习; (2)Matlab或Visual C++软件工具。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)…

    数据库 2023年6月16日
    0129
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球