前 30+ 个 Spring Boot 面试问题及答案
这篇文章将向你展示一组精心策划的经常被问到的Spring Boot面试问题,以帮助你在面试中取得好成绩。
欢迎阅读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 命令行界面:**Spring Boot 命令行界面(CLI) 允许开发人员使用命令行界面与Spring Boot 应用程序交互。它提供了一种快速原型化、开发和测试Spring Boot 应用程序的便捷方法,无需复杂的设置或配置。 Spring Boot DevTools:Spring Boot DevTools 是一组可以增强您的开发体验的工具。这包括自动应用程序重新启动、静态资源实时重新加载以及改进的错误报告等功能。 DevTools 显着提高了开发人员的工作效率并加快了开发过程。 Spring Boot 测试:Spring Boot 为测试应用程序提供了出色的支持。它提供了各种测试实用程序,例如测试切片、模拟对象以及各种测试框架的简单配置。 Spring Boot Tests 使编写和运行Spring Boot 应用程序测试变得容易。
Spring 和 Spring Boot 有什么区别?
下面是Spring 和Spring Boot 之间的比较:
特性Spring SPRING 启动配置需要手动配置提供自动配置和合理的默认值依赖管理手动依赖管理使用启动器简化依赖管理XML 配置严重依赖XML 配置推荐使用注释和Java 配置嵌入式服务器需要手动设置和配置自动配置以简化包括嵌入式服务器的部署自动配置功能有限强大的自动配置功能,可实现快速开发开发设置和配置需要时间立即使用可用于配置的默认值加快开发速度优先选择约定而非配置优先选择契约而非配置支持微服务支持微服务架构提供与Spring Cloud Test 支持Spring Test 提供强大的测试支持使用Spring Boot 测试驱动程序增强测试支持Executor 作为单独的模块提供Executor 集成到框架内的核心中
需要注意的是,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 starter 包含对Web 相关库的依赖,并提供处理Web 请求的默认配置。 Starter 简化了依赖关系管理并确保必要的组件无缝地协同工作。
通过在项目中包含启动器,您可以避免手动配置,节省时间和精力,并从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。
Spring Boot 使用的默认嵌入式服务器是什么?
Spring Boot 使用的默认内置服务器是Apache Tomcat。 Spring Boot 包含Tomcat 作为依赖项,并在您使用spring-boot-starter-web 启动器或任何其他与Web 相关的启动器时自动将Tomcat 配置为默认内置服务器。
如何在 Spring Boot 应用程序中配置属性?
Spring Boot 应用程序可以使用各种方法配置属性。常用的方法有:
application.properties 或application.yml 文件:Spring Boot 允许您在application.properties 文件(对于键/值格式属性)或application.yml 文件(对于YAML 格式属性)中定义配置属性。命令行参数:Spring Boot 支持使用命令行参数配置属性。运行应用程序时,可以将此格式作为命令行参数传递属性。例如: –property=valuejava -jar myapp.jar –server.port=8080 环境变量:Spring Boot 可以从环境变量中读取属性。您可以使用属性名称和值定义环境变量,Spring Boot 会自动将它们映射到相应的属性。系统属性:Spring Boot还支持使用系统属性配置属性。您可以使用标志在应用程序运行时将系统属性传递给应用程序。例如: -Djava -jar myapp.jar -Dserver.port=8080 @ConfigurationProperties 注解:Spring Boot 提供了@ConfigurationProperties 注解,允许您将外部属性直接绑定到Java 对象。您可以定义一个用@ConfigurationProperties 注解的配置类,并为要绑定的属性指定前缀。 Spring Boot 会自动将属性映射到配置类中的相应字段。
什么是 Spring Boot 自动配置,它是如何工作的?
Spring Boot 自动配置会根据类路径依赖项自动配置应用程序上下文,从而减少手动配置的需要。扫描类路径以查找所需的库并设置所需的bean 和组件。自动配置遵循预定义的规则,并使用@ConditionalOnClass 和@ConditionalOnMissingBean 等注释选择性地启用配置。 Spring Boot 通过向主应用程序类添加@EnableAutoConfiguration 注解来触发自动配置过程。自动配置类通常打包到包含所需配置类和依赖项的启动器中。在项目中包含启动器可以让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 Executor是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 bean 的完整列表,包括名称、类型和依赖项等信息。
解释 Spring Boot 配置文件的概念以及如何使用它们
Spring Boot 配置文件提供了一种管理不同环境或部署场景的应用程序配置的方法。配置文件允许您为开发、测试、生产和其他特定环境定义不同的配置集。
简要说明Spring Boot 配置文件的工作原理以及如何使用它们。
定义配置文件:在Spring Boot 应用程序中,您可以通过为每个环境创建单独的属性文件来定义配置文件。例如,您可以使用application-dev.properties 进行开发,使用application-test.properties 进行测试,使用application-prod.properties 进行生产。激活您的个人资料:有多种方法可以激活您的个人资料。
在application.properties 中设置spring.profiles.active 属性或在启动应用程序时将其设置为命令行参数。在测试中使用类级@ActiveProfiles 注释。使用系统环境变量或JVM 系统属性指定活动配置文件。 配置文件特定的配置:激活配置文件时,Spring Boot 会加载相应的属性文件并应用该文件中定义的配置。例如,如果devprofile 处于活动状态。 Spring Boot 加载application-dev.properties 文件并应用该文件中定义的配置。覆盖配置:特定于配置文件的配置可以覆盖application.properties 或其他属性文件中定义的默认配置。这允许您为每个环境自定义某些设置,而无需更改核心应用程序代码。 Bean 和组件扫描: Bean 和组件扫描:您还可以使用配置文件控制Bean 和组件扫描过程。您可以使用@Profile 注释来注释bean 或组件,以指定仅当特定配置文件处于活动状态时才创建和注册它们。 Spring Boot默认配置文件:Spring Boot提供了default、dev、test、prod等几种默认配置文件。默认配置文件始终处于活动状态,您可以根据您的部署环境激活其他配置文件。
Spring Boot 中常用的注解有哪些?
以下是一些常用的Spring Boot 注解:
@SpringBootApplication:该注解用于标记Spring Boot应用程序的主类。它结合了三个注释:@Configuration、@EnableAutoConfiguration 和@ComponentScan。支持应用程序中的自动配置和组件扫描。 @RestController:该注解用于表明一个类是一个RESTful控制器。组合@Controller 和@ResponseBody 注释。这样就无需使用@ResponseBody 注释每个方法,从而简化了RESTful Web 服务的开发。 @RequestMapping:该注解用于将HTTP 请求映射到特定的处理程序方法。这可以在类级别应用,指定类中所有方法的基本URL,也可以在方法级别应用,为特定处理程序方法定义URL 和HTTP 方法。 @Autowired:该注解用于自动将依赖项连接到Spring管理的bean。这允许Spring 自动检测并注入所需的bean,而无需任何显式的bean 配置。 @Value:该注解用于将属性文件或环境变量中的值注入到Spring bean中。它不仅可以用于插入字符串和数字等简单值,还可以用于插入复杂的对象。 @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
@作品
@ConfigurationProperties(前缀=\’myapp\’)
公共类MyAppConfiguration {
私有字符串名称。
私人国际端口。
//getter 和setter
//其他自定义方法或业务逻辑
}
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=我的用户名
spring.datasource.password=我的密码
# 服务器配置
服务器端口=8080
服务器
.servlet.context-path=/myapp
# Custom Application Properties
myapp.name=My Application
myapp.api.key=abc123
在此示例中,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 Data?Spring Boot 中使用哪些不同的 Spring Data Starters?
Spring Data 是 Spring Framework 的一个子项目,它通过为不同的数据存储技术提供统一的编程模型来简化数据访问。它减少了样板代码,并允许开发人员专注于业务逻辑。Spring Data 支持关系数据库、NoSQL 数据库等。它利用存储库来抽象数据访问操作,无需手动 CRUD 代码。Spring Data的启动器为特定数据库提供预配置的依赖项和自动配置,从而简化了设置过程。借助 Spring Data,开发人员可以轻松地与数据源进行交互,并从其强大的查询功能中受益。
以下是适用于不同类型数据库的 Spring Data 启动器的一些示例:
spring-boot-starter-data-jpa:此入门器提供对 Java 持久性 API (JPA) 和 Hibernate 的支持。它包括使用 JPA 处理关系数据库所需的依赖关系和配置。spring-boot-starter-data-mongodb:此启动器提供对 MongoDB(一种流行的 NoSQL 数据库)的支持。它包括使用 Spring Data MongoDB 处理 MongoDB 所需的依赖项和配置。spring-boot-starter-data-redis:此启动器提供对 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 应用程序中启用调试日志,可以将 application.properties 或 application.yml 文件中的 logging.level 属性设置为“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 连接:**使用 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.ymlfile 中来为打包的应用程序启用它:
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 中配置项目外部的外部配置,可以使用以下方法之一:
外部配置文件:您可以使用 spring.config.name 和 spring.config.location 属性指定外部配置文件的位置,而不是将 application.properties 或 application.ymlfile 放在项目中。例如,您可以将配置文件放在单独的目录中,并通过命令行或环境变量提供其位置。操作系统环境变量:您可以利用操作系统提供的环境变量来配置 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 和 artifactId 创建新的 Maven 项目。根据项目需求调整这些值。
添加 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 执行器运行状况检查以及创建自定义运行状况指示器的过程?
运行状况检查提供有关应用程序整体运行状况的宝贵信息,例如数据库连接、外部服务可用性或您定义的任何其他自定义检查。
默认情况下,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() {
// 在此处执行自定义运行状况检查逻辑
boolean isHealthy = true; // 替换为实际运行状况检查逻辑
if (isHealthy) {
return Health.up().build();
} else {
return Health.down().withDetail(\”CustomComponent\”, \”Not Healthy\”).build();
}
}
}
在此示例中,CustomHealthIndicator 类实现 HealthIndicator 接口并重写 health() 方法。在 health() 方法中,您可以编写自定义运行状况检查逻辑。如果组件运行正常,则可以返回 Health.up()。否则,您可以使用 withDetail() 方法返回 Health.down() 以及其他详细信息。
创建自定义运行状况指示器后,Spring Boot Actuator 将自动检测到它,并通过 /actuator/health 端点公开其运行状况检查。
如何在 Spring Boot 中创建自定义执行器端点?
要在 Spring Boot 中创建自定义 Actuator 端点,您可以按照下列步骤操作:
创建自定义终结点:创建一个表示自定义终结点的新类。此类应使用 @Endpoint 进行批注,以指示它是执行器端点。您还可以使用其他注释(如 @ReadOperation、@WriteOperation 或 @DeleteOperation)来定义终端节点支持的操作类型。定义终结点操作:在自定义终结点类中,定义终结点应执行的操作。您可以将 @ReadOperation 等注释用于只读操作,将 @WriteOperation 用于写入操作,将 @DeleteOperation 用于删除操作。这些注释有助于定义终结点的 HTTP 方法和请求映射。实现终结点逻辑:为自定义终结点的每个操作实现逻辑。这可能包括检索信息、修改应用程序状态或执行任何其他所需的操作。您可以根据特定要求灵活地定义功能。(可选)添加安全配置:如果自定义终结点需要安全限制,则可以通过添加安全注释或修改应用程序的安全配置来配置它。
下面是创建自定义执行器端点的示例:
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() {
// 检索和返回信息
return \”这是自定义终结点信息。\”;
}
@WriteOperation
public void updateInformation(String newInformation) {
// 更新信息
// …
}
}
在此示例中,CustomEndpoint 类使用 @Endpoint 进行批注,以将其定义为 Actuator 终结点。它有两个操作:getInformation() 用 @ReadOperation 注释用于检索信息,updateInformation() 用 @WriteOperation 注释用于更新信息。
创建自定义终结点后,它将自动注册到 Spring Boot Actuator,您可以通过 /actuator 基本路径和终结点 ID 访问它。在这种情况下,可以通过 /actuator/customEndpoint 访问自定义终结点。
如何在 Spring Boot 应用程序中启用 CORS(跨域资源共享)?
若要在 Spring Boot 应用程序中启用跨域资源共享 (CORS),可以执行以下步骤:
添加 CORS 配置:创建一个配置类并使用 @Configuration 对其进行批注以定义 CORS 配置。在类中,创建一个 CorsFilter 类型的 Bean 来配置 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();
// 允许来自任何来源的请求
config.addAllowedOrigin(\”*\”);
// 允许特定的 HTTP methods (e.g., GET, POST, PUT, DELETE)
config.addAllowedMethod(\”*\”);
// 允许特定的 HTTP headers
config.addAllowedHeader(\”*\”);
source.registerCorsConfiguration(\”/**\”, config);
return new CorsFilter(source);
}
}
在此示例中,我们将 CORS 配置为允许来自任何源 的请求、允许所有 HTTP 方法 和允许所有 HTTP 标头 。您可以根据特定要求自定义这些设置。
启用 Web MVC 配置:如果尚未启用此操作,请确保通过在配置类上使用 @EnableWebMvc 注释或扩展 WebMvcConfigurerAdapter 类,在 Spring Boot 应用程序中启用 Web MVC 配置。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
// 如果需要,其他 Web MVC 配置
}
测试 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 应用程序中,您可以使用 Spring 的任务调度功能提供的@Scheduled注解来调度任务。以下是在 Spring Boot 应用程序中计划任务的方法:
启用计划:首先,确保在 Spring Boot 应用程序中启用了任务计划。这可以通过在配置类上使用 @EnableScheduling 注释或在主应用程序类上添加@SpringBootApplication注释以及@EnableScheduling来完成。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MyAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyAppApplication.class, args);
}
}
创建计划任务方法:在应用程序中定义要计划的方法。用 @Scheduled 注释方法,并使用 cron、固定延迟或固定速率指定所需的调度表达式。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyScheduledTasks {
@Scheduled(cron = \”0 0 8 * * *\”) //每天早上 8 点跑
public void executeTask() {
System.out.println(\”计划任务已执行!\”);
}
}
在此示例中,该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 {
//其他配置
}
批注缓存方法:确定应用程序中要缓存的方法,并使用适当的缓存批注对其进行批注。Spring Boot 为缓存操作提供了 @Cacheable、@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) {
// 从数据库或外部服务获取数据的逻辑
return data;
}
}
在此示例中,getData() 方法使用 @Cacheable 进行注释,并将缓存名称指定为“dataCache”。首次使用特定键调用此方法时,将提取并缓存数据。使用相同键的后续调用将从缓存中检索数据,而不是执行该方法。
配置缓存设置:如果需要自定义缓存行为,可以提供特定于所选缓存提供程序的其他配置属性。可以在 application.properties 或 application.yml 文件中设置这些配置属性。
例如,如果您使用的是 Ehcache,则可以在 ehcache.xml 文件中配置缓存设置,并在 application.properties 文件中指定文件的位置。
通过执行这些步骤,您可以在 Spring Boot 应用程序中启用缓存,并利用缓存的优势来提高性能并减少数据库或外部服务调用。
结论
总之,这些 Spring Boot 面试问题涵盖了与 Spring Boot、其功能和最佳实践相关的广泛主题。通过熟悉这些问题及其答案,您可以更好地准备 Spring Boot 面试,并展示您在开发 Spring Boot 应用程序方面的知识和专业知识。
#以上关于前 30+ 个 Spring Boot 面试问题及答案的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92901.html