Java面试题(13)- Spring Boot

Java面试题(13)- Spring Boot

1 Spring Boot有哪些优点?

Spring Boot是Spring组件一站式解决方案,主要简化了使用Spring的难度,减少了繁重的配置,提供了各种启动器,让开发者能快速上手。

  • 自动配置:这极大地消除了手动配置。基础框架附带了一个名为 auto-configure 的内置库,它为我们完成了这项工作。它检测某些类的存在以及类路径上的存在,并为我们自动配置它们。例如:— 当我们在项目中添加spring-boot-starter-web依赖项时,Spring Boot 自动配置会查找 Spring MVC 是否在类路径中。它自动配置dispatcherServlet、默认错误页面和web jars。— 同样,当我们添加spring-boot-starter-data-jpa依赖项时,我们会看到 Spring Boot 自动配置,自动配置一个数据源和一个实体管理器。
  • 嵌入式 Tomcat Web 服务器:Spring Boot 默认随 Tomcat 服务器一起提供。因此,我们不需要配置服务器来运行应用程序(如果我们的首选服务器是 Tomcat)。
  • 入门 POM:Spring Boot 本身提供了许多启动 POM 来完成开发生活中最常见的任务。我们可以依赖它们和框架本身,而不需要去第三方库。举例如下:
    spring-boot-starter-web:创建 REST API
    spring-boot-starter-data-jpa:连接 SQL 数据库
    spring-boot-starter-data-mongodb:连接 MongoDB
    spring-boot-starter -aop:应用面向方面的编程概念
    spring-boot-starter-security:实现安全性,如基于角色的身份验证
    spring-boot-starter-test:实现单元测试
  • Actuator执行器 API:Spring Boot Actuator 是 Spring Boot 框架的一个子项目。它能够通过一组 API 端点查看见解和指标并监控正在运行的应用程序。如数据库统计信息、CPU内存使用情况、GC 周期、跟踪 HTTP 请求

2 Spring Boot的核心配置文件有哪些,区别是什么呢?

Spring Boot的核心配置文件是application 和 bootstrap 配置文件。application 配置文件主要是用于 Spring Boot 项目的自动化配置。bootstrap 配置文件有以下几个应用场景:
(1)使用 Spring Cloud Config 配置中心时,在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
(2)一些固定的不能被覆盖的属性。
(3) 配置一些加密解密的属性。

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

配置文件是.properties 和 .yml,区别主要是书写格式不同。

  • properties
app.user.name = javastack
  • yml
    app
    user
    name:javastack

4 SpringBoot的核心注解是哪个?

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

5 Spring Boot 3.0 的新特性了解吗?

(1)Spring Boot 3.0 最低要求 Java 17,并向上兼容支持 Java 19。
(2)Spring Boot 3.0 通过 Micrometer 和 Micrometer 追踪提高应用可观察性,支持集成 Micrometer 1.10+,引入了的全新的可观察 API 并自动配置 Micrometer 追踪,包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 组件的支持。使用 Micrometer 可观察 API 时,完成观察后,可将观察数据主动报告给 Zipkin 等组件,并支持自定义追踪参数配置,这个新特性可以更好地帮助我们了解并监控应用的健康状况。
(3)Spring Boot 3.0 应用支持转换为 GraalVM 原生镜像,这可以提供显著的内存和启动性能改进。
(4)支持声明式 HTTP 客户端,通过注解即可自动生成HTTP接口。演示代码如下:

@HttpExchange
public interface DemoApi {
    @GetExchange("/list")
    String list();
}

通过给 HttpServiceProxyFactory 注入携带目标接口 baseUrl 的的 webclient,实现 webclient 和 http interface 的关联:

@Bean
DemoApi demoApi() {
  WebClient client = WebClient.builder().baseUrl("http://pigx.pigx.vip/").build();
  HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
  return factory.createClient(DemoApi.class);
}

6 SpringBoot打成的jar和普通jar有什么区别?

Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

7 SpringBoot中如何实现定时任务?

在 Spring Boot 中使用定时任务主要有两种方式:
(1)使用 Spring 中的 @Scheduled 注解。
(2)集成第三方框架 Quartz,定义 Job 和 Trigger 。

8 什么是Spring Boot Starter?

Spring Boot Starter Starter可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成 Spring 和其他技术,而不需要到处找示例代码和依赖包。Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,根据spring.factories配置加载AutoConfigure类,根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context。

参考(摘抄的文字版权属于原作者)
https://www.cnblogs.com/flydean/p/17037072.html
https://www.jianshu.com/p/0c3207508dc1
https://cloud.tencent.com/developer/article/2030771

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注