欢迎来到我们详尽的 Spring Boot 面试问题指南!Spring Boot 由于其易用性和开发 Java 应用程序的生产力提升而在 Java 生态系统中越来越受欢迎。这篇文章将为您提供一组经常被要求的 Spring Boot 面试问题,以帮助您在面试中取得好成绩,无论您是发现 Spring Boot 的新手还是准备面试的经验丰富的开发人员。
什么是 Spring Boot?
Spring Boot 是一个构建在 Spring 框架之上的开源 Java 框架。Spring Boot 旨在以最少的设置和配置更轻松地创建独立的、可用于生产的应用程序。
Spring Boot 的主要优点是什么?
Spring Boot 为 Java 应用程序开发提供了几个显着的优势。一些主要优势包括:
简化配置:Spring Boot 通过提供合理的默认值和自动配置来消除手动配置的需要。它减少了样板代码,使开发人员能够更加专注于业务逻辑。
快速应用程序开发:Spring Boot 提供了一系列提高生产力的功能,例如嵌入式服务器、自动依赖管理和热重加载。这些功能加速了开发并缩短了上市时间。
固执己见的方法:Spring Boot 遵循固执己见的方法,提供预定义的约定和最佳实践。它促进一致性并减少做出配置决策的认知负担。
微服务友好:Spring Boot与Spring Cloud无缝集成,方便微服务架构的开发。它为服务发现、分布式配置、负载平衡等提供内置支持。
生产就绪功能:Spring Boot Actuator 提供了一组用于监控、运行状况检查、指标和安全性的生产就绪功能。它使开发人员能够深入了解应用程序性能并轻松监控系统运行状况。
嵌入式服务器:Spring Boot 附带 Tomcat、Jetty 和 Undertow 等嵌入式服务器。这消除了手动服务器设置和配置的需要。
自动配置:Spring Boot 的自动配置功能会根据类路径依赖项自动配置应用程序。它简化了设置过程并减少了手动配置工作。
社区支持:Spring Boot 拥有一个庞大且活跃的开发者社区。这意味着有大量的资源、文档和社区支持可用于故障排除和共享最佳实践。
生态系统集成:Spring Boot 与其他 Spring 项目和第三方库无缝集成。它利用强大的 Spring 生态系统,允许开发人员利用各种工具和库来实现各种目的。
可测试性:Spring Boot 为测试提供了出色的支持,包括单元测试、集成测试和端到端测试。它提供了测试切片、模拟对象以及针对不同测试框架的轻松配置等功能。
Spring Boot 的关键组件有哪些?
Spring Boot 整合了多个关键组件,这些组件协同工作以提供简化且高效的开发体验。Spring Boot 的主要组件是:
自动配置:Spring Boot 的自动配置功能会根据在类路径上检测到的依赖项自动配置应用程序。它消除了手动配置的需要并减少了样板代码。
Starter依赖项:Spring Boot提供了一组starter依赖项,它们是预先打包的依赖项,可以方便配置常见用例。Starters 简化了依赖关系管理,并帮助开发人员快速开始使用 Web 应用程序、数据访问、安全性、测试等基本功能。
嵌入式服务器:Spring Boot 包括嵌入式 servlet 容器,例如 Tomcat、Jetty 和 Undertow。这些嵌入式服务器允许开发人员将应用程序打包为可执行 JAR 文件,从而简化部署并使应用程序独立。
Spring Boot Actuator:Spring Boot Actuator 提供用于监视和管理应用程序的生产就绪功能。它提供用于运行状况检查、指标、日志记录、跟踪等的端点。该执行器可以轻松监控和管理生产环境中的应用程序。
Spring Boot CLI: Spring Boot 命令行界面 (CLI) 允许开发人员使用命令行界面与 Spring Boot 应用程序进行交互。它提供了一种快速原型化、开发和测试 Spring Boot 应用程序的便捷方法,无需复杂的设置和配置。
Spring Boot DevTools:Spring Boot DevTools 是一组增强开发体验的工具。它包括自动应用程序重新启动、静态资源实时重新加载和增强的错误报告等功能。DevTools 显着提高了开发人员的工作效率并加快了开发过程。
Spring Boot 测试:Spring Boot 为测试应用程序提供了出色的支持。它提供了各种测试实用程序,包括测试切片、模拟对象以及针对不同测试框架的简单配置。Spring Boot 测试使 Spring Boot 应用程序的编写和执行测试变得更加容易。
Spring 和 Spring Boot 有什么区别?
Spring 和 Spring Boot 的比较如下:
特征 | Spring | Spring Boot |
---|---|---|
配置 | 需要手动配置 | 提供自动配置和合理的默认值 |
依赖管理 | 手动依赖管理 | 通过启动器简化依赖管理 |
XML配置 | 严重依赖 XML 配置 | 鼓励使用注释和Java配置 |
嵌入式服务器 | 需要手动设置和配置 | 包括嵌入式服务器,易于部署 |
自动配置 | 自动配置功能有限 | 强大的自动配置,快速开发 |
开发时间 | 更长的开发设置和配置 | 通过开箱即用的默认设置加快开发速度 |
约定优于配置 | 强调配置 | 强调约定优于配置 |
微服务支持 | 支持微服务架构 | 提供与 Spring Cloud 的无缝集成 |
测试支持 | Spring Test 提供强大的测试支持 | Spring Boot Test 增强了测试支持 |
执行器 | 执行器可作为单独的模块使用 | 执行器集成到核心框架中 |
需要注意的是,Spring 和 Spring Boot 并不相互排斥。Spring Boot 构建在 Spring 框架之上,并提供了额外的功能来简化和加速 Spring 应用程序开发。
注释的目的是什么@SpringBootApplication?
该@SpringBootApplication注释结合了其他三个常用注释:@Configuration、@EnableAutoConfiguration和@ComponentScan。这个单一注释允许对应用程序进行简洁和简化的配置。
该@SpringBootApplication注释通常放置在 Spring Boot 应用程序的主类上。它充当应用程序的入口点并引导 Spring Boot 运行时环境。
什么是 Spring Boot 启动器?
Spring Boot 启动器是预先配置的依赖项的精选集合,可简化 Spring Boot 应用程序中特定功能的设置和配置。它们提供必要的依赖项、合理的默认配置和自动配置。
例如, spring-boot-starter-web 启动器包含与 Web 相关的库的依赖项,并提供用于处理 Web 请求的默认配置。初学者简化了依赖关系管理并确保所需的组件无缝地协同工作。
通过在项目中包含启动器,您可以避免手动配置,从而节省时间和精力,并获得 Spring Boot 固执己见的应用程序开发方法的好处。
常用 Spring Boot 启动器示例
以下是一些常用 Spring Boot 启动器的示例:
spring-boot-starter-web:该启动器用于使用 Spring MVC 开发 Web 应用程序。它包括处理 HTTP 请求、管理 Web 会话和提供静态资源的依赖项。
spring-boot-starter-data-jpa:此启动器使用 Java Persistence API (JPA) 提供数据访问支持,并使用 Hibernate 作为默认实现。它包括数据库连接、实体管理和事务管理的依赖关系。
spring-boot-starter-security:此启动器用于向 Spring Boot 应用程序添加安全功能。它包括身份验证、授权和安全通信的依赖项。
spring-boot-starter-test:此启动器用于在 Spring Boot 应用程序中编写单元测试和集成测试。它包括 JUnit、Mockito 和 Spring Test 等测试框架的依赖项。
spring-boot-starter-actuator:此启动器添加了生产就绪功能来监视和管理应用程序。它包括用于运行状况检查、指标、日志记录等的端点。
spring-boot-starter-data-redis:该启动器用于使用 Redis(一种内存数据存储)。它包括连接Redis服务器和执行数据操作的依赖项。
spring-boot-starter-amqp:此启动器提供对高级消息队列协议 (AMQP) 消息传递的支持。它包括 RabbitMQ 等消息传递组件的依赖项。
spring-boot-starter-mail:此启动器用于在 Spring Boot 应用程序中发送电子邮件。它包括电子邮件相关功能的依赖项。
spring-boot-starter-cache:此启动器提供对 Spring Boot 应用程序中缓存数据的支持。它包括 Ehcache 和 Redis 等缓存框架的依赖项。
spring-boot-starter-oauth2-client:此启动器用于在 Spring Boot 应用程序中实现 OAuth 2.0 客户端功能。它包括与 OAuth 2.0 授权服务器交互的依赖项。
Spring Boot 入门者的完整列表可以在 Spring Boot 官方网站上找到。以下是官方 Spring Boot Starters 文档的链接:Spring Boot Starters。(https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter)
Spring Boot 使用的默认嵌入式服务器是什么?
Spring Boot 使用的默认嵌入式服务器是 Apache Tomcat。spring-boot-starter-webSpring Boot 包含 Tomcat 作为依赖项,并在您使用启动器或任何其他与 Web 相关的启动器时自动将其配置为默认嵌入式服务器。
如何在 Spring Boot 应用程序中配置属性?
在 Spring Boot 应用程序中,可以使用各种方法配置属性。以下是常用的方法:
application.properties 或 application.yml 文件application.properties:Spring Boot 允许您在文件(对于键值格式的属性)或文件application.yml(对于 YAML 格式的属性) 中定义配置属性。
命令行参数:Spring Boot 支持使用命令行参数配置属性。--property=value运行应用程序时,您可以按以下格式将属性作为命令行参数传递。例如:java -jar myapp.jar --server.port=8080.
环境变量:Spring Boot 可以从环境变量中读取属性。您可以使用属性名称和值定义环境变量,Spring Boot 会自动将它们映射到相应的属性。
系统属性:Spring Boot还支持使用系统属性配置属性。您可以在运行应用程序时使用该标志将系统属性传递给应用程序-D。例如:java -jar myapp.jar -Dserver.port=8080.
@ConfigurationProperties 注解:Spring Boot 提供了该@ConfigurationProperties注解,它允许您将外部属性直接绑定到 Java 对象。您可以定义一个带注释的配置类@ConfigurationProperties,并指定要绑定的属性的前缀。Spring Boot会自动将属性映射到配置类的相应字段。
什么是 Spring Boot 自动配置,它是如何工作的?
Spring Boot 自动配置会根据类路径依赖项自动配置应用程序上下文,从而减少手动配置的需要。它扫描类路径以查找所需的库并设置必要的 bean 和组件。自动配置遵循预定义的规则,并使用@ConditionalOnClass和等注释@ConditionalOnMissingBean来选择性地启用配置。通过添加@EnableAutoConfiguration向主应用程序类添加注解,Spring Boot 会触发自动配置过程。自动配置类通常打包在启动器中,其中包含必要的配置类和依赖项。在项目中包含启动器使 Spring Boot 能够自动配置相关组件。
Spring Boot 自动配置的好处包括:
减少样板代码:自动配置消除了手动配置的需要,减少了设置常用功能所需的样板代码量。
自以为是的默认值:自动配置根据最佳实践提供合理的默认值和约定。这使得开发人员可以快速上手 Spring Boot 项目,而无需花费时间进行手动配置。
与第三方库集成:自动配置与流行的库和框架无缝集成,自动配置其使用所需的必要bean和组件。
条件配置:自动配置根据特定类或 bean 是否存在有条件地应用配置。这可确保避免配置冲突,并且仅应用相关配置。
如何使用 Spring Initializer 创建 Spring Boot 应用程序?
使用 Spring Initializr 可以轻松创建 Spring Boot 应用程序。Spring Initializr 是一个基于 Web 的工具,可生成项目模板,其中包含 Spring Boot 应用程序的所有必要依赖项和配置。
要使用 Spring Initializr 轻松创建 Spring Boot 应用程序,您可以按照以下步骤操作:
访问 Spring Initializr 网站:访问 Spring Initializr 官方网站:start.spring.io。
配置项目设置:在 Spring Initializr 网站上,您将找到用于配置项目的各种选项。提供以下详细信息:
项目:选择项目类型(Maven 或 Gradle)。
语言:选择编程语言(Java 或 Kotlin)。
Spring Boot 版本:选择所需的 Spring Boot 版本。
项目元数据:指定项目的组、工件和包名称。
添加依赖项:在“依赖项”部分中,您可以搜索并选择项目所需的依赖项。Spring Initializr 提供了广泛的选项,例如 Spring Web、Spring Data JPA、Spring Security 等。您还可以在搜索栏中搜索特定的依赖项。
生成项目:配置项目设置并添加所需的依赖项后,单击“生成”按钮。Spring Initializr 将根据您的选择生成可下载的项目存档(ZIP 文件)。
解压项目:下载生成的 ZIP 文件并将其解压到计算机上所需的位置。
在 IDE 中导入项目:打开您的首选 IDE(例如 IntelliJ IDEA、Eclipse 或 Visual Studio Code)并将提取的项目作为 Maven 或 Gradle 项目导入。
开始开发:导入项目后,您可以开始开发 Spring Boot 应用程序。添加您的应用程序逻辑,创建控制器、服务、存储库和其他必要的组件来实现您所需的功能。
运行应用程序:使用 IDE 的运行配置或命令行工具来运行 Spring Boot 应用程序。应用程序将启动,您可以使用提供的 URL 或端点访问它。
什么是 Spring Boot 执行器?什么是不同的执行器端点?
Spring Boot Actuators 是 Spring Boot 框架提供的一组生产就绪的管理和监控工具。它们使您能够在运行时监视 Spring Boot 应用程序并与之交互,从而提供有关其运行状况、指标和其他各个方面的宝贵见解。
执行器公开一组 RESTful 端点,允许您访问有用的信息并在 Spring Boot 应用程序上执行某些操作。一些常用的端点包括:
/actuator/health:提供有关应用程序运行状况的信息,指示它是否已启动并运行或遇到任何问题。
/actuator/info:显示有关应用程序的一般信息,可以对其进行自定义以包括版本、描述和其他相关元数据等详细信息。
/actuator/metrics:提供有关应用程序各个方面的指标,例如内存使用情况、CPU 使用情况、请求/响应时间等。这些指标有助于监控和性能分析。
/actuator/env:显示当前环境属性及其值,包括来自外部源(如 application.properties 或环境变量)的配置属性。
/actuator/loggers:允许您动态查看和修改应用程序记录器的日志记录级别。这对于故障排除和调试目的非常有用。
/actuator/mappings:显示应用程序公开的所有端点的详细映射,包括每个端点支持的 HTTP 方法。
/actuator/beans:提供应用程序中所有 Spring beans 的完整列表,包括它们的名称、类型和依赖项等信息。
解释 Spring Boot 配置文件的概念及其使用方法
Spring Boot 配置文件提供了一种管理不同环境或部署场景的应用程序配置的方法。通过配置文件,您可以为开发、测试、生产和任何其他特定环境定义不同的配置集。
以下是 Spring Boot 配置文件如何工作以及如何使用它们的简要说明:
定义配置文件:在 Spring Boot 应用程序中,您可以通过为每个环境创建单独的属性文件来定义配置文件。例如,您可以将其application-dev.properties用于开发环境、application-test.properties测试环境和application-prod.properties生产环境。
激活配置文件:可以通过多种方式激活配置文件:
通过在启动应用程序时将属性设置spring.profiles.active为application.properties命令行参数或将其设置为命令行参数。
通过@ActiveProfiles在测试中使用类级别的注释。
通过使用系统环境变量或 JVM 系统属性来指定活动配置文件。
配置文件特定的配置:一旦激活配置文件,Spring Boot 将加载相应的属性文件并应用其中定义的配置。例如,如果dev配置文件处于活动状态。Spring Boot 将加载该application-dev.properties文件并应用其中定义的配置。
覆盖配置:特定于配置文件的配置可以覆盖application.properties或其他属性文件中定义的默认配置。这允许您专门针对每个环境自定义某些设置,而无需修改核心应用程序代码。
Bean 和组件扫描:配置文件还可以用于控制 Bean 和组件扫描过程。您可以使用 来注释 bean 或组件,@Profile以指定它们仅应在特定配置文件处于活动状态时创建和注册。
Spring Boot 的默认配置文件:Spring Boot 提供了一些默认配置文件,例如default、dev、test和prod。默认情况下,该default配置文件始终处于活动状态,可以根据部署环境激活其他配置文件。
Spring Boot 中常用的注解有哪些?
以下是一些常用的 Spring Boot 注解:
@SpringBootApplication:该注解用于标记Spring Boot应用程序的主类。它结合了三个注释:@Configuration、@EnableAutoConfiguration和@ComponentScan。它可以在您的应用程序中启用自动配置和组件扫描。
@RestController:该注解用于表明一个类是一个RESTful控制器。它结合了@Controller和@ResponseBody注释。它无需使用 来注释每个方法,从而简化了 RESTful Web 服务的开发@ResponseBody。
@RequestMapping:此注释用于将 HTTP 请求映射到特定的处理程序方法。它可以应用于类级别,为类中的所有方法指定基本 URL,也可以应用于方法级别,为特定处理程序方法定义 URL 和 HTTP 方法。
@Autowired:此注释用于自动将依赖项连接到 Spring 管理的 bean 中。它允许Spring自动发现并注入所需的bean,而不需要显式的bean配置。
@Value:此注释用于将属性文件或环境变量中的值注入到 Spring Beans 中。它可用于注入简单的值(如字符串或数字)以及复杂的对象。
@Configuration:该注解用于指示一个类向Spring应用程序上下文提供配置。它经常与 结合使用@Bean来定义 bean 和其他配置元素。
@ComponentScan:该注解用于指定扫描 Spring 组件的基础包,例如控制器、服务和存储库。它允许 Spring 在应用程序上下文中自动发现并注册这些组件。
@EnableAutoConfiguration:该注解启用了Spring Boot的自动配置机制,该机制根据依赖关系和类路径自动配置各种组件和bean。
@Conditional:此注释用于根据某些条件有条件地启用或禁用 Bean 和配置。它允许您根据特定条件或环境设置自定义应用程序的行为。
中级 Spring Boot 面试问题
注释有什么用@ConfigurationProperties?
Spring Boot 中的注解@ConfigurationProperties用于将外部配置属性绑定到 Java 类。它提供了一种便捷的方法将配置文件中定义的属性(例如application.properties或application.yml)映射到配置类中的相应字段。
使用的好处@ConfigurationProperties包括:
类型安全:注释确保配置属性绑定到配置类中定义的适当类型,防止类型不匹配和潜在的运行时错误。
属性验证:您可以使用 Spring 提供的各种验证注解来验证属性,例如@NotNull、@Min、@Max和自定义验证。
分层属性映射:您可以定义嵌套的配置类来表示复杂的配置结构,并将它们分层映射到相应的属性。
易于集成:带注释的配置类可以轻松自动装配并在整个应用程序中使用,从而简化了不同组件中配置值的检索。
这是使用的示例@ConfigurationProperties:
文章来源地址https://www.toymoban.com/diary/mianshi/411.html
@Configuration @ConfigurationProperties(prefix = "myapp") public class MyAppConfiguration { private String name; private int port; // Getters and setters // Other custom methods or business logic }
application.properties# Database Configuration spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=myusername spring.datasource.password=mypassword # Server Configuration server.port=8080 server.servlet.context-path=/myapp # Custom Application Properties myapp.name=My Application myapp.api.key=abc123
文章来源:https://www.toymoban.com/diary/mianshi/411.html
在此示例中,该类MyAppConfiguration使用@ConfigurationProperties“myapp”进行注释并指定前缀。配置文件中以“myapp”为前缀定义的属性将绑定到该类中的相应字段。
Spring Boot如何支持微服务架构?
Spring Boot 为构建基于微服务的应用程序提供了广泛的支持。它提供了一系列功能和集成,可简化微服务的开发、部署和管理。以下是 Spring Boot 支持微服务架构的方式:
Spring Cloud:Spring Boot 与 Spring Cloud 无缝集成,Spring Cloud 是一组旨在构建和操作云原生微服务的工具和框架。Spring Cloud提供了服务发现、客户端负载均衡、分布式配置管理、断路器等能力。
微服务设计模式:Spring Boot 采用微服务设计模式,例如使用 RESTful API 进行服务之间的通信、用于可扩展性的无状态服务以及分散式数据管理。它提供了一个轻量级且灵活的框架,使开发人员能够轻松实现这些模式。
服务注册和发现:Spring Boot 与服务注册和发现工具集成,例如 Netflix Eureka 和 Consul。这些工具允许微服务向注册表注册并动态发现其他服务。这有助于实现服务弹性、负载平衡和自动服务发现。
外部化配置:Spring Boot 支持外部化配置,允许根据环境或特定部署需求轻松配置微服务。它可以将配置与代码分离,从而更轻松地跨多个微服务管理配置属性。
分布式跟踪和监控:Spring Boot 与 Zipkin 和 Sleuth 等分布式跟踪系统集成,支持跨多个微服务跟踪请求。它还提供与 Prometheus 和 Grafana 等监控工具的集成,以监控微服务的运行状况、性能和资源使用情况。
弹性和容错:Spring Boot 支持使用断路器(例如 Netflix Hystrix)等功能来实现容错微服务,这有助于防止分布式系统中的级联故障。它还提供了处理微服务交互中的重试、超时和回退的机制。
容器化和部署:Spring Boot 应用程序可以使用 Docker 等技术轻松容器化,从而允许使用 Kubernetes 等容器编排平台无缝部署和扩展微服务。
什么是 Spring 数据?Spring Boot 中使用了哪些不同的 Spring Data Starter?
Spring Data 是 Spring Framework 的一个子项目,它通过为不同的数据存储技术提供统一的编程模型来简化数据访问。它减少了样板代码并允许开发人员专注于业务逻辑。Spring Data 支持关系数据库、NoSQL 数据库等。它利用存储库来抽象数据访问操作,从而无需手动 CRUD 代码。Spring Data 的启动器为特定数据库提供预配置的依赖项和自动配置,从而简化了设置过程。使用Spring Data,开发人员可以轻松地与数据源交互,并受益于其强大的查询功能。
以下是针对不同类型数据库的 Spring Data 入门示例:
spring-boot-starter-data-jpa:此启动器提供对 Java Persistence API (JPA) 和 Hibernate 的支持。它包括使用 JPA 处理关系数据库所需的依赖项和配置。
spring-boot-starter-data-mongodb:此启动器提供对流行的 NoSQL 数据库 MongoDB 的支持。它包括使用 Spring Data MongoDB 处理 MongoDB 所需的依赖项和配置。
spring-boot-starter-data-redis:此启动器提供对内存数据结构存储 Redis 的支持。它包括使用 Spring Data Redis 处理 Redis 所需的依赖项和配置。
spring-boot-starter-data-cassandra:此启动器提供对 Apache Cassandra(一种高度可扩展的 NoSQL 数据库)的支持。它包括使用 Spring Data Cassandra 处理 Cassandra 所需的依赖项和配置。
spring-boot-starter-data-elasticsearch:此启动器为分布式搜索和分析引擎 Elasticsearch 提供支持。它包括使用 Spring Data Elasticsearch 来使用 Elasticsearch 所需的依赖项和配置。
如何在 Spring Boot 应用程序中使用 RESTful Web 服务?
在 Spring Boot 应用程序中,您可以使用 RestTemplate 或 WebClient 使用 RESTful Web 服务。RestTemplate 提供了用于发出 HTTP 请求的同步 API,而 WebClient 则提供了非阻塞和反应式方法。两者都允许您发送 GET、POST、PUT、DELETE 请求、处理响应数据并将其反序列化为 Java 对象。
如何为 Spring Boot 应用程序创建和运行单元测试?
在 Spring Boot 应用程序中,您可以使用 Spring Test 框架创建和运行单元测试。@RunWith(SpringRunner.class)通过利用和 等注释@SpringBootTest,您可以初始化应用程序上下文并对 Bean 和组件执行测试。
此外,您可以使用 Mockito 或其他模拟框架来模拟依赖项并隔离测试中的单元。借助 JUnit 或 AssertJ 的断言,您可以验证预期的行为和断言。
最后,可以使用 Maven 或 Gradle 等工具来运行测试,这些工具执行测试并提供有关测试结果和覆盖率的报告。
如何在Spring Boot应用程序中启用调试日志?
要在 Spring Boot 应用程序中启用调试日志,您可以将logging.level application.properties 或 application.yml 文件中的属性设置为“DEBUG”。此配置将使日志框架能够输出详细的调试信息。或者,您可以使用@Slf4j类上的注释来启用该特定类的日志记录。此外,您可以通过设置来配置特定包或类的日志记录级别logging.level.{package/class}此外,您可以通过在配置文件中
要为整个应用程序启用调试日志,请使用:
logging.level.<package-name>=DEBUG
要为整个应用程序启用调试日志,请使用:
logging.level.root=DEBUG
Spring Boot 如何支持响应式编程
Spring Boot 通过与Spring WebFlux集成提供对反应式编程的支持。它允许开发人员构建非阻塞、事件驱动的应用程序,这些应用程序可以利用反应式流和反应式编程模型有效地处理大量并发请求。
如何在 Spring Boot 应用程序中启用安全性?
我们可以使用以下不同的选项。
使用 Spring Security: 通过将 Spring Security Starter 依赖项添加到项目的构建配置中来启用安全性。
OAuth2 和 OpenID Connect:使用 OAuth2 和 OpenID Connect 协议实现安全身份验证和授权。
LDAP 集成: 通过与 LDAP(轻量级目录访问协议)服务器集成来实现用户身份验证和授权,从而实现安全性。
JWT(JSON Web 令牌)身份验证:通过实施基于 JWT 的身份验证来实现无状态和可扩展的身份验证,从而实现安全性。
自定义身份验证提供程序:通过创建自定义身份验证提供程序以根据您自己的逻辑处理身份验证来启用安全性。
Spring Boot DevTools 的目的是什么?我们如何启用它?
它旨在提高生产力、简化开发工作流程并在开发阶段实现应用程序的快速重启。
以下是 Spring Boot DevTools 的一些主要功能和优点:
自动重新启动:DevTools 监视类路径中的任何更改,并在检测到修改时自动重新启动应用程序。
实时重新加载:DevTools 支持静态资源的实时重新加载,例如 HTML、CSS 和 JavaScript 文件。
远程应用程序重启:DevTools 提供了远程触发应用程序重启的功能。当在分布式环境中工作或应用程序在远程服务器上运行时,这非常有用。
开发人员友好的错误页面:DevTools 提供了增强的错误页面,其中提供了有关应用程序开发过程中遇到的异常和错误的详细信息。
配置属性支持:DevTools 支持 Spring Boot 配置属性的热重载。对 application.properties 或 application.yml 文件所做的更改会自动应用,无需重新启动应用程序,从而可以快速更新配置。
数据库控制台:DevTools 包括一个嵌入式数据库控制台,它提供基于 Web 的界面来与应用程序的数据库进行交互。这使得开发人员可以轻松执行 SQL 查询、查看和修改数据以及执行其他与数据库相关的任务,而无需外部工具。
要在 Spring Boot 应用程序中启用 Spring Boot DevTools,您需要包含适当的依赖项和配置。以下是启用 DevTools 的步骤:
添加 DevTools 依赖项:在您的pom.xml文件(对于 Maven)或build.gradle文件(对于 Gradle)中,添加以下依赖项:
<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
// Gradle implementation 'org.springframework.boot:spring-boot-devtools'
spring-boot:run启用自动重启:默认情况下,为使用命令或从 IDE运行的应用程序启用 DevTools 。但是,您还可以通过将以下配置属性添加到您的application.properties或application.yml文件中来为打包应用程序启用它:
spring.devtools.restart.enabled=true
针对有经验的人的高级 Spring Boot 面试问题
如何在 Spring Boot 应用程序中启用 HTTPS?
要在 Spring Boot 应用程序中启用 HTTPS,您需要配置应用程序的服务器属性并提供必要的 SSL/TLS 证书。以下是启用 HTTPS 的一般步骤:
获取 SSL/TLS 证书:从受信任的证书颁发机构 (CA) 获取 SSL/TLS 证书或生成自签名证书以用于开发/测试目的。
配置服务器属性:使用以下服务器配置更新application.properties或文件:application.yml
server.port=8443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=your_keystore_password server.ssl.key-alias=your_alias_name
在上面的示例中,替换keystore.p12为密钥库文件的路径,并设置适当的密码和别名值。
提供 SSL/TLS 证书:放置 SSL/TLS 证书文件 (keystore.p12 ) 放在类路径中或在服务器属性中指定绝对文件路径。
重新启动应用程序:重新启动 Spring Boot 应用程序以使更改生效。
完成这些步骤后,您的 Spring Boot 应用程序将配置为使用 HTTPS。https://localhost:8443您可以使用服务器配置中指定的适当主机名和端口来访问应用程序。
如何在Spring Boot中配置外部配置
要在 Spring Boot 中的项目外部配置外部配置,可以使用以下方法之一:
外部配置文件:您可以使用和属性指定外部配置文件的位置,而不是将application.properties或application.yml文件放置在项目中。例如,您可以将配置文件放置在单独的目录中,并通过命令行或环境变量提供其位置。spring.config.namespring.config.location
操作系统环境变量:您可以利用操作系统提供的环境变量来配置 Spring Boot 应用程序。@Value将所需的配置属性定义为环境变量,并使用注释或对象在应用程序中访问它们Environment。
Spring Cloud Config:如果您有更复杂的配置设置或需要集中配置管理,可以使用 Spring Cloud Config。它提供了一个服务器端组件,您可以在其中存储和管理多个应用程序的配置。然后,您的 Spring Boot 应用程序可以从 Spring Cloud Config 服务器获取其配置。
配置服务器:另一种选择是使用外部配置服务器,例如 Apache ZooKeeper 或 HashiCorp Consul。这些服务器充当配置的中央存储库,并且可以由多个应用程序访问。
如何使用 Maven 创建 Spring Boot 应用程序?
要使用 Maven 创建 Spring Boot 应用程序,请执行以下步骤:
设置 Maven:确保 Maven 已安装在您的系统上。您可以从 Apache Maven 网站下载 Maven 并按照安装说明进行操作。
创建 Maven 项目:打开命令行或终端并导航到要在其中创建项目的目录。使用以下 Maven 命令创建新项目:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-spring-boot-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
此命令使用指定的groupId和来创建一个新的 Maven 项目artifactId。根据项目的需要调整这些值。
添加 Spring Boot Starter 依赖项:打开pom.xml项目文件并为 Spring Boot 添加以下依赖项:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.2</version> </dependency> </dependencies>
此依赖项包括您的应用程序必需的 Spring Boot 库。
创建 Spring Boot 主类:在 Maven 项目的相应包中创建一个新的 Java 类。此类将作为 Spring Boot 应用程序的入口点。这是一个例子:
package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
该@SpringBootApplication注释结合了基本 Spring Boot 应用程序所需的多个注释。
构建并运行应用程序:使用以下 Maven 命令构建并运行 Spring Boot 应用程序:
mvn spring-boot:run
Maven 将构建您的项目、解决依赖关系并启动 Spring Boot 应用程序。
应用程序运行后,您可以使用http://localhost:8080(默认情况下)或指定的端口(如果您已自定义)在 Web 浏览器中访问它。
就是这样!您已经使用 Maven 创建了一个 Spring Boot 应用程序。您现在可以添加其他依赖项、配置应用程序并开发所需的功能。
条件注释有哪些不同类型?
Spring Boot 中一些常用的条件注释有:
@ConditionalOnClass:如果类路径中存在特定类,则此注释会配置 bean 或组件。
@ConditionalOnMissingClass:如果类路径中不存在特定类,则此注释会配置 bean 或组件。
@ConditionalOnBean:仅当应用程序上下文中存在另一个特定 bean 时,此注释才会配置 bean 或组件。
@ConditionalOnMissingBean:仅当应用程序上下文中不存在另一个特定 bean 时,此注释才会配置 bean 或组件。
@ConditionalOnProperty:此注释根据应用程序配置文件中特定属性的值来配置 bean 或组件。
@ConditionalOnExpression:此注释基于 SpEL(Spring 表达式语言)表达式配置 bean 或组件。
@ConditionalOnWebApplication:仅当应用程序是 Web 应用程序时,此注释才配置 bean 或组件。
@ConditionalOnNotWebApplication:仅当应用程序不是 Web 应用程序时,此注释才配置 bean 或组件。
您能否解释一下 Spring Boot Actuator 健康检查以及创建自定义健康指标的过程?
运行状况检查提供有关应用程序整体运行状况的宝贵信息,例如数据库连接、外部服务可用性或您定义的任何其他自定义检查。
默认情况下,Spring Boot Actuator 提供一组预定义的运行状况指示器,用于检查数据库、磁盘空间等各种组件的运行状况。但是,您还可以创建自定义运行状况指示器来监控应用程序的特定方面。
要创建自定义运行状况指示器,您需要实现该HealthIndicator接口并重写该health()方法。该health()方法应返回 的实例Health,它表示自定义组件的运行状况。您可以使用该类Health来指示组件是启动、关闭还是处于未知状态。
以下是自定义运行状况指示器的示例:
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { // Perform your custom health check logic here boolean isHealthy = true; // Replace with your actual health check logic if (isHealthy) { return Health.up().build(); } else { return Health.down().withDetail("CustomComponent", "Not Healthy").build(); } } }
在此示例中,该类CustomHealthIndicator实现该HealthIndicator接口并重写该health()方法。在该health()方法内部,您可以编写自定义运行状况检查逻辑。如果组件正常,则可以返回Health.up()。否则,您可以Health.down()使用该方法返回附加详细信息withDetail()。
一旦创建了自定义健康指示器,Spring Boot Actuator就会自动检测到它,并且它的健康检查将通过/actuator/health。
如何在 Spring Boot 中创建自定义执行器端点?
要在 Spring Boot 中创建自定义 Actuator 端点,您可以按照以下步骤操作:
创建自定义端点:创建一个代表您的自定义端点的新类。此类应使用 进行注释@Endpoint以表明它是 Actuator 端点。您还可以使用其他注释(例如@ReadOperation、@WriteOperation、 或 )@DeleteOperation来定义端点支持的操作类型。
定义端点操作:在自定义端点类中,定义端点应执行的操作。您可以将注释用于@ReadOperation只读操作、@WriteOperation写入操作和@DeleteOperation删除操作。这些注释有助于定义端点的 HTTP 方法和请求映射。
实现端点逻辑:实现自定义端点的每个操作的逻辑。这可以包括检索信息、修改应用程序状态或执行任何其他所需的操作。您可以根据您的具体要求灵活地定义功能。
(可选)添加安全配置:如果您的自定义端点需要安全限制,您可以通过添加安全注解或修改应用程序的安全配置来进行配置。
以下是创建自定义 Actuator 端点的示例:
import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; import org.springframework.stereotype.Component; @Component @Endpoint(id = "customEndpoint") public class CustomEndpoint { @ReadOperation public String getInformation() { // Retrieve and return information return "This is custom endpoint information."; } @WriteOperation public void updateInformation(String newInformation) { // Update information // ... } }
在此示例中,该类CustomEndpoint使用 进行注释,@Endpoint将其定义为 Actuator 端点。它有两个操作:getInformation()注释为@ReadOperation用于检索信息,updateInformation()注释@WriteOperation为用于更新信息。
创建自定义端点后,它将自动注册到 Spring Boot Actuator,您可以通过/actuator基本路径和端点 ID 来访问它。在这种情况下,可以通过 访问自定义端点/actuator/customEndpoint。
如何在 Spring Boot 应用程序中启用 CORS(跨域资源共享)?
要在 Spring Boot 应用程序中启用跨域资源共享 (CORS),您可以按照以下步骤操作:
添加 CORS 配置:创建一个配置类并对其进行注释@Configuration以定义 CORS 配置。在类内部,创建一个 bean 类型CorsFilter来配置 CORS 设置。
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); // Allow requests from any origin config.addAllowedOrigin("*"); // Allow specific HTTP methods (e.g., GET, POST, PUT, DELETE) config.addAllowedMethod("*"); // Allow specific HTTP headers config.addAllowedHeader("*"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }
在此示例中,我们将 CORS 配置为允许来自任何来源的请求 ( *)、允许所有 HTTP 方法 ( *) 以及允许所有 HTTP 标头 ( *)。您可以根据您的具体要求自定义这些设置。
启用 Web MVC 配置:如果您还没有这样做,请确保通过@EnableWebMvc在配置类上使用注释或扩展该类来在 Spring Boot 应用程序中启用 Web MVC 配置WebMvcConfigurerAdapter。
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { // Additional Web MVC configuration if needed }
测试 CORS 配置:在 Spring Boot 应用程序中启用 CORS 后,您可以通过向端点发出跨源请求来测试它。确保响应中包含必要的 CORS 标头,例如Access-Control-Allow-Origin、Access-Control-Allow-Methods和Access-Control-Allow-Headers。
启用 CORS 允许您的 Spring Boot 应用程序处理跨域请求并做出适当的响应。考虑安全影响并根据应用程序的要求和安全策略配置 CORS 设置非常重要。
如何在 Spring Boot 应用程序中安排任务?
在 Spring Boot 应用程序中,您可以使用@ScheduledSpringTask Scheduling功能提供的注释来安排任务。以下是如何在 Spring Boot 应用程序中安排任务:
启用调度:首先,确保在 Spring Boot 应用程序中启用任务调度。@EnableScheduling这可以通过在配置类上使用注释或通过在主应用程序类上添加@SpringBootApplication注释来完成。@EnableScheduling
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { // Additional Web MVC configuration if needed }
创建计划任务方法:在应用程序中定义要计划的方法。@Scheduled使用 cron、固定延迟或固定速率注释该方法并指定所需的调度表达式。
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class MyScheduledTasks { @Scheduled(cron = "0 0 8 * * *") // Run at 8 AM every day public void executeTask() { // Logic for the scheduled task System.out.println("Scheduled task executed!"); } }
在此示例中,executeTask()根据提供的 cron 表达式,该方法计划在每天上午 8 点运行。
测试计划任务:定义计划任务后,您可以启动 Spring Boot 应用程序并观察计划任务根据指定的计划执行。
该@Scheduled注释提供了多个用于指定调度表达式的选项,包括 cron 表达式、固定延迟和固定速率。您可以根据您的日程安排要求选择最合适的选项。
如何在 Spring Boot 应用程序中启用缓存?
要在 Spring Boot 应用程序中启用缓存,您可以按照以下步骤操作:
添加缓存依赖项:确保项目的依赖项中包含必要的缓存依赖项。Spring Boot 提供对 Ehcache、Redis 和 Caffeine 等各种缓存提供程序的支持。将相应的缓存依赖项添加到项目的pom.xml文件中。
例如,要使用 Ehcache 缓存提供程序,请添加以下依赖项:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
启用缓存:要在 Spring Boot 应用程序中启用缓存,请将@EnableCaching注释添加到配置类中。此注释启用 Spring 的缓存基础结构并为应用程序缓存做好准备。
import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; @Configuration @EnableCaching public class CachingConfig { // Additional configuration if needed }
为缓存注释方法:确定应用程序中要缓存的方法,并使用适当的缓存注释对其进行注释。@CacheableSpring Boot 为缓存操作提供了、@CachePut、 等注解@CacheEvict。
例如,假设您有一个从数据库检索数据的方法,并且您想要缓存结果。您可以使用注释该方法并@Cacheable指定缓存名称。
import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class DataService { @Cacheable("dataCache") public Data getData(String key) { // Logic to fetch data from a database or external service return data; } }
在此示例中,该getData()方法注释为@Cacheable“dataCache”,并将缓存名称指定为“dataCache”。第一次使用特定键调用此方法时,将获取并缓存数据。使用相同键的后续调用将从缓存中检索数据,而不是执行该方法。
配置缓存设置:如果您需要自定义缓存行为,您可以提供特定于您选择的缓存提供程序的其他配置属性。application.properties这些配置属性可以在或文件中设置application.yml。
例如,如果您使用Ehcache,您可以在文件中配置缓存设置ehcache.xml,并在文件中指定文件的位置application.properties。
通过执行以下步骤,您可以在 Spring Boot 应用程序中启用缓存,并利用缓存的优势来提高性能并减少数据库或外部服务调用。
总结
总之,这些 Spring Boot 面试问题涵盖了与 Spring Boot、其功能和最佳实践相关的广泛主题。通过熟悉这些问题及其答案,您可以更好地准备 Spring Boot 面试,并展示您在开发 Spring Boot 应用程序方面的知识和专业知识。
到此这篇关于30 多个Spring Boot面试问题及答案的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!