歡迎來到我們詳盡的 Spring Boot 面試問題指南!Spring Boot 由于其易用性和開發(fā) Java 應(yīng)用程序的生產(chǎn)力提升而在 Java 生態(tài)系統(tǒng)中越來越受歡迎。這篇文章將為您提供一組經(jīng)常被要求的 Spring Boot 面試問題,以幫助您在面試中取得好成績,無論您是發(fā)現(xiàn) Spring Boot 的新手還是準(zhǔn)備面試的經(jīng)驗(yàn)豐富的開發(fā)人員。
什么是 Spring Boot?
Spring Boot 是一個(gè)構(gòu)建在 Spring 框架之上的開源 Java 框架。Spring Boot 旨在以最少的設(shè)置和配置更輕松地創(chuàng)建獨(dú)立的、可用于生產(chǎn)的應(yīng)用程序。
Spring Boot 的主要優(yōu)點(diǎn)是什么?
Spring Boot 為 Java 應(yīng)用程序開發(fā)提供了幾個(gè)顯著的優(yōu)勢。一些主要優(yōu)勢包括:
簡化配置:Spring Boot 通過提供合理的默認(rèn)值和自動配置來消除手動配置的需要。它減少了樣板代碼,使開發(fā)人員能夠更加專注于業(yè)務(wù)邏輯。
快速應(yīng)用程序開發(fā):Spring Boot 提供了一系列提高生產(chǎn)力的功能,例如嵌入式服務(wù)器、自動依賴管理和熱重加載。這些功能加速了開發(fā)并縮短了上市時(shí)間。
固執(zhí)己見的方法:Spring Boot 遵循固執(zhí)己見的方法,提供預(yù)定義的約定和最佳實(shí)踐。它促進(jìn)一致性并減少做出配置決策的認(rèn)知負(fù)擔(dān)。
微服務(wù)友好:Spring Boot與Spring Cloud無縫集成,方便微服務(wù)架構(gòu)的開發(fā)。它為服務(wù)發(fā)現(xiàn)、分布式配置、負(fù)載平衡等提供內(nèi)置支持。
生產(chǎn)就緒功能:Spring Boot Actuator 提供了一組用于監(jiān)控、運(yùn)行狀況檢查、指標(biāo)和安全性的生產(chǎn)就緒功能。它使開發(fā)人員能夠深入了解應(yīng)用程序性能并輕松監(jiān)控系統(tǒng)運(yùn)行狀況。
嵌入式服務(wù)器:Spring Boot 附帶 Tomcat、Jetty 和 Undertow 等嵌入式服務(wù)器。這消除了手動服務(wù)器設(shè)置和配置的需要。
自動配置:Spring Boot 的自動配置功能會根據(jù)類路徑依賴項(xiàng)自動配置應(yīng)用程序。它簡化了設(shè)置過程并減少了手動配置工作。
社區(qū)支持:Spring Boot 擁有一個(gè)龐大且活躍的開發(fā)者社區(qū)。這意味著有大量的資源、文檔和社區(qū)支持可用于故障排除和共享最佳實(shí)踐。
生態(tài)系統(tǒng)集成:Spring Boot 與其他 Spring 項(xiàng)目和第三方庫無縫集成。它利用強(qiáng)大的 Spring 生態(tài)系統(tǒng),允許開發(fā)人員利用各種工具和庫來實(shí)現(xiàn)各種目的。
可測試性:Spring Boot 為測試提供了出色的支持,包括單元測試、集成測試和端到端測試。它提供了測試切片、模擬對象以及針對不同測試框架的輕松配置等功能。
Spring Boot 的關(guān)鍵組件有哪些?
Spring Boot 整合了多個(gè)關(guān)鍵組件,這些組件協(xié)同工作以提供簡化且高效的開發(fā)體驗(yàn)。Spring Boot 的主要組件是:
自動配置:Spring Boot 的自動配置功能會根據(jù)在類路徑上檢測到的依賴項(xiàng)自動配置應(yīng)用程序。它消除了手動配置的需要并減少了樣板代碼。
Starter依賴項(xiàng):Spring Boot提供了一組starter依賴項(xiàng),它們是預(yù)先打包的依賴項(xiàng),可以方便配置常見用例。Starters 簡化了依賴關(guān)系管理,并幫助開發(fā)人員快速開始使用 Web 應(yīng)用程序、數(shù)據(jù)訪問、安全性、測試等基本功能。
嵌入式服務(wù)器:Spring Boot 包括嵌入式 servlet 容器,例如 Tomcat、Jetty 和 Undertow。這些嵌入式服務(wù)器允許開發(fā)人員將應(yīng)用程序打包為可執(zhí)行 JAR 文件,從而簡化部署并使應(yīng)用程序獨(dú)立。
Spring Boot Actuator:Spring Boot Actuator 提供用于監(jiān)視和管理應(yīng)用程序的生產(chǎn)就緒功能。它提供用于運(yùn)行狀況檢查、指標(biāo)、日志記錄、跟蹤等的端點(diǎn)。該執(zhí)行器可以輕松監(jiān)控和管理生產(chǎn)環(huán)境中的應(yīng)用程序。
Spring Boot CLI: Spring Boot 命令行界面 (CLI) 允許開發(fā)人員使用命令行界面與 Spring Boot 應(yīng)用程序進(jìn)行交互。它提供了一種快速原型化、開發(fā)和測試 Spring Boot 應(yīng)用程序的便捷方法,無需復(fù)雜的設(shè)置和配置。
Spring Boot DevTools:Spring Boot DevTools 是一組增強(qiáng)開發(fā)體驗(yàn)的工具。它包括自動應(yīng)用程序重新啟動、靜態(tài)資源實(shí)時(shí)重新加載和增強(qiáng)的錯誤報(bào)告等功能。DevTools 顯著提高了開發(fā)人員的工作效率并加快了開發(fā)過程。
Spring Boot 測試:Spring Boot 為測試應(yīng)用程序提供了出色的支持。它提供了各種測試實(shí)用程序,包括測試切片、模擬對象以及針對不同測試框架的簡單配置。Spring Boot 測試使 Spring Boot 應(yīng)用程序的編寫和執(zhí)行測試變得更加容易。
Spring 和 Spring Boot 有什么區(qū)別?
Spring 和 Spring Boot 的比較如下:
特征 | Spring | Spring Boot |
---|---|---|
配置 | 需要手動配置 | 提供自動配置和合理的默認(rèn)值 |
依賴管理 | 手動依賴管理 | 通過啟動器簡化依賴管理 |
XML配置 | 嚴(yán)重依賴 XML 配置 | 鼓勵使用注釋和Java配置 |
嵌入式服務(wù)器 | 需要手動設(shè)置和配置 | 包括嵌入式服務(wù)器,易于部署 |
自動配置 | 自動配置功能有限 | 強(qiáng)大的自動配置,快速開發(fā) |
開發(fā)時(shí)間 | 更長的開發(fā)設(shè)置和配置 | 通過開箱即用的默認(rèn)設(shè)置加快開發(fā)速度 |
約定優(yōu)于配置 | 強(qiáng)調(diào)配置 | 強(qiáng)調(diào)約定優(yōu)于配置 |
微服務(wù)支持 | 支持微服務(wù)架構(gòu) | 提供與 Spring Cloud 的無縫集成 |
測試支持 | Spring Test 提供強(qiáng)大的測試支持 | Spring Boot Test 增強(qiáng)了測試支持 |
執(zhí)行器 | 執(zhí)行器可作為單獨(dú)的模塊使用 | 執(zhí)行器集成到核心框架中 |
需要注意的是,Spring 和 Spring Boot 并不相互排斥。Spring Boot 構(gòu)建在 Spring 框架之上,并提供了額外的功能來簡化和加速 Spring 應(yīng)用程序開發(fā)。
注釋的目的是什么@SpringBootApplication?
該@SpringBootApplication注釋結(jié)合了其他三個(gè)常用注釋:@Configuration、@EnableAutoConfiguration和@ComponentScan。這個(gè)單一注釋允許對應(yīng)用程序進(jìn)行簡潔和簡化的配置。
該@SpringBootApplication注釋通常放置在 Spring Boot 應(yīng)用程序的主類上。它充當(dāng)應(yīng)用程序的入口點(diǎn)并引導(dǎo) Spring Boot 運(yùn)行時(shí)環(huán)境。
什么是 Spring Boot 啟動器?
Spring Boot 啟動器是預(yù)先配置的依賴項(xiàng)的精選集合,可簡化 Spring Boot 應(yīng)用程序中特定功能的設(shè)置和配置。它們提供必要的依賴項(xiàng)、合理的默認(rèn)配置和自動配置。
例如, spring-boot-starter-web 啟動器包含與 Web 相關(guān)的庫的依賴項(xiàng),并提供用于處理 Web 請求的默認(rèn)配置。初學(xué)者簡化了依賴關(guān)系管理并確保所需的組件無縫地協(xié)同工作。
通過在項(xiàng)目中包含啟動器,您可以避免手動配置,從而節(jié)省時(shí)間和精力,并獲得 Spring Boot 固執(zhí)己見的應(yīng)用程序開發(fā)方法的好處。
常用 Spring Boot 啟動器示例
以下是一些常用 Spring Boot 啟動器的示例:
spring-boot-starter-web:該啟動器用于使用 Spring MVC 開發(fā) Web 應(yīng)用程序。它包括處理 HTTP 請求、管理 Web 會話和提供靜態(tài)資源的依賴項(xiàng)。
spring-boot-starter-data-jpa:此啟動器使用 Java Persistence API (JPA) 提供數(shù)據(jù)訪問支持,并使用 Hibernate 作為默認(rèn)實(shí)現(xiàn)。它包括數(shù)據(jù)庫連接、實(shí)體管理和事務(wù)管理的依賴關(guān)系。
spring-boot-starter-security:此啟動器用于向 Spring Boot 應(yīng)用程序添加安全功能。它包括身份驗(yàn)證、授權(quán)和安全通信的依賴項(xiàng)。
spring-boot-starter-test:此啟動器用于在 Spring Boot 應(yīng)用程序中編寫單元測試和集成測試。它包括 JUnit、Mockito 和 Spring Test 等測試框架的依賴項(xiàng)。
spring-boot-starter-actuator:此啟動器添加了生產(chǎn)就緒功能來監(jiān)視和管理應(yīng)用程序。它包括用于運(yùn)行狀況檢查、指標(biāo)、日志記錄等的端點(diǎn)。
spring-boot-starter-data-redis:該啟動器用于使用 Redis(一種內(nèi)存數(shù)據(jù)存儲)。它包括連接Redis服務(wù)器和執(zhí)行數(shù)據(jù)操作的依賴項(xiàng)。
spring-boot-starter-amqp:此啟動器提供對高級消息隊(duì)列協(xié)議 (AMQP) 消息傳遞的支持。它包括 RabbitMQ 等消息傳遞組件的依賴項(xiàng)。
spring-boot-starter-mail:此啟動器用于在 Spring Boot 應(yīng)用程序中發(fā)送電子郵件。它包括電子郵件相關(guān)功能的依賴項(xiàng)。
spring-boot-starter-cache:此啟動器提供對 Spring Boot 應(yīng)用程序中緩存數(shù)據(jù)的支持。它包括 Ehcache 和 Redis 等緩存框架的依賴項(xiàng)。
spring-boot-starter-oauth2-client:此啟動器用于在 Spring Boot 應(yīng)用程序中實(shí)現(xiàn) OAuth 2.0 客戶端功能。它包括與 OAuth 2.0 授權(quán)服務(wù)器交互的依賴項(xiàng)。
Spring Boot 入門者的完整列表可以在 Spring Boot 官方網(wǎng)站上找到。以下是官方 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 使用的默認(rèn)嵌入式服務(wù)器是什么?
Spring Boot 使用的默認(rèn)嵌入式服務(wù)器是 Apache Tomcat。spring-boot-starter-webSpring Boot 包含 Tomcat 作為依賴項(xiàng),并在您使用啟動器或任何其他與 Web 相關(guān)的啟動器時(shí)自動將其配置為默認(rèn)嵌入式服務(wù)器。
如何在 Spring Boot 應(yīng)用程序中配置屬性?
在 Spring Boot 應(yīng)用程序中,可以使用各種方法配置屬性。以下是常用的方法:
application.properties 或 application.yml 文件application.properties:Spring Boot 允許您在文件(對于鍵值格式的屬性)或文件application.yml(對于 YAML 格式的屬性) 中定義配置屬性。
命令行參數(shù):Spring Boot 支持使用命令行參數(shù)配置屬性。--property=value運(yùn)行應(yīng)用程序時(shí),您可以按以下格式將屬性作為命令行參數(shù)傳遞。例如:java -jar myapp.jar --server.port=8080.
環(huán)境變量:Spring Boot 可以從環(huán)境變量中讀取屬性。您可以使用屬性名稱和值定義環(huán)境變量,Spring Boot 會自動將它們映射到相應(yīng)的屬性。
系統(tǒng)屬性:Spring Boot還支持使用系統(tǒng)屬性配置屬性。您可以在運(yùn)行應(yīng)用程序時(shí)使用該標(biāo)志將系統(tǒng)屬性傳遞給應(yīng)用程序-D。例如:java -jar myapp.jar -Dserver.port=8080.
@ConfigurationProperties 注解:Spring Boot 提供了該@ConfigurationProperties注解,它允許您將外部屬性直接綁定到 Java 對象。您可以定義一個(gè)帶注釋的配置類@ConfigurationProperties,并指定要綁定的屬性的前綴。Spring Boot會自動將屬性映射到配置類的相應(yīng)字段。
什么是 Spring Boot 自動配置,它是如何工作的?
Spring Boot 自動配置會根據(jù)類路徑依賴項(xiàng)自動配置應(yīng)用程序上下文,從而減少手動配置的需要。它掃描類路徑以查找所需的庫并設(shè)置必要的 bean 和組件。自動配置遵循預(yù)定義的規(guī)則,并使用@ConditionalOnClass和等注釋@ConditionalOnMissingBean來選擇性地啟用配置。通過添加@EnableAutoConfiguration向主應(yīng)用程序類添加注解,Spring Boot 會觸發(fā)自動配置過程。自動配置類通常打包在啟動器中,其中包含必要的配置類和依賴項(xiàng)。在項(xiàng)目中包含啟動器使 Spring Boot 能夠自動配置相關(guān)組件。
Spring Boot 自動配置的好處包括:
減少樣板代碼:自動配置消除了手動配置的需要,減少了設(shè)置常用功能所需的樣板代碼量。
自以為是的默認(rèn)值:自動配置根據(jù)最佳實(shí)踐提供合理的默認(rèn)值和約定。這使得開發(fā)人員可以快速上手 Spring Boot 項(xiàng)目,而無需花費(fèi)時(shí)間進(jìn)行手動配置。
與第三方庫集成:自動配置與流行的庫和框架無縫集成,自動配置其使用所需的必要bean和組件。
條件配置:自動配置根據(jù)特定類或 bean 是否存在有條件地應(yīng)用配置。這可確保避免配置沖突,并且僅應(yīng)用相關(guān)配置。
如何使用 Spring Initializer 創(chuàng)建 Spring Boot 應(yīng)用程序?
使用 Spring Initializr 可以輕松創(chuàng)建 Spring Boot 應(yīng)用程序。Spring Initializr 是一個(gè)基于 Web 的工具,可生成項(xiàng)目模板,其中包含 Spring Boot 應(yīng)用程序的所有必要依賴項(xiàng)和配置。
要使用 Spring Initializr 輕松創(chuàng)建 Spring Boot 應(yīng)用程序,您可以按照以下步驟操作:
訪問 Spring Initializr 網(wǎng)站:訪問 Spring Initializr 官方網(wǎng)站:start.spring.io。
配置項(xiàng)目設(shè)置:在 Spring Initializr 網(wǎng)站上,您將找到用于配置項(xiàng)目的各種選項(xiàng)。提供以下詳細(xì)信息:
項(xiàng)目:選擇項(xiàng)目類型(Maven 或 Gradle)。
語言:選擇編程語言(Java 或 Kotlin)。
Spring Boot 版本:選擇所需的 Spring Boot 版本。
項(xiàng)目元數(shù)據(jù):指定項(xiàng)目的組、工件和包名稱。
添加依賴項(xiàng):在“依賴項(xiàng)”部分中,您可以搜索并選擇項(xiàng)目所需的依賴項(xiàng)。Spring Initializr 提供了廣泛的選項(xiàng),例如 Spring Web、Spring Data JPA、Spring Security 等。您還可以在搜索欄中搜索特定的依賴項(xiàng)。
生成項(xiàng)目:配置項(xiàng)目設(shè)置并添加所需的依賴項(xiàng)后,單擊“生成”按鈕。Spring Initializr 將根據(jù)您的選擇生成可下載的項(xiàng)目存檔(ZIP 文件)。
解壓項(xiàng)目:下載生成的 ZIP 文件并將其解壓到計(jì)算機(jī)上所需的位置。
在 IDE 中導(dǎo)入項(xiàng)目:打開您的首選 IDE(例如 IntelliJ IDEA、Eclipse 或 Visual Studio Code)并將提取的項(xiàng)目作為 Maven 或 Gradle 項(xiàng)目導(dǎo)入。
開始開發(fā):導(dǎo)入項(xiàng)目后,您可以開始開發(fā) Spring Boot 應(yīng)用程序。添加您的應(yīng)用程序邏輯,創(chuàng)建控制器、服務(wù)、存儲庫和其他必要的組件來實(shí)現(xiàn)您所需的功能。
運(yùn)行應(yīng)用程序:使用 IDE 的運(yùn)行配置或命令行工具來運(yùn)行 Spring Boot 應(yīng)用程序。應(yīng)用程序?qū)樱梢允褂锰峁┑?URL 或端點(diǎn)訪問它。
什么是 Spring Boot 執(zhí)行器?什么是不同的執(zhí)行器端點(diǎn)?
Spring Boot Actuators 是 Spring Boot 框架提供的一組生產(chǎn)就緒的管理和監(jiān)控工具。它們使您能夠在運(yùn)行時(shí)監(jiān)視 Spring Boot 應(yīng)用程序并與之交互,從而提供有關(guān)其運(yùn)行狀況、指標(biāo)和其他各個(gè)方面的寶貴見解。
執(zhí)行器公開一組 RESTful 端點(diǎn),允許您訪問有用的信息并在 Spring Boot 應(yīng)用程序上執(zhí)行某些操作。一些常用的端點(diǎn)包括:
/actuator/health:提供有關(guān)應(yīng)用程序運(yùn)行狀況的信息,指示它是否已啟動并運(yùn)行或遇到任何問題。
/actuator/info:顯示有關(guān)應(yīng)用程序的一般信息,可以對其進(jìn)行自定義以包括版本、描述和其他相關(guān)元數(shù)據(jù)等詳細(xì)信息。
/actuator/metrics:提供有關(guān)應(yīng)用程序各個(gè)方面的指標(biāo),例如內(nèi)存使用情況、CPU 使用情況、請求/響應(yīng)時(shí)間等。這些指標(biāo)有助于監(jiān)控和性能分析。
/actuator/env:顯示當(dāng)前環(huán)境屬性及其值,包括來自外部源(如 application.properties 或環(huán)境變量)的配置屬性。
/actuator/loggers:允許您動態(tài)查看和修改應(yīng)用程序記錄器的日志記錄級別。這對于故障排除和調(diào)試目的非常有用。
/actuator/mappings:顯示應(yīng)用程序公開的所有端點(diǎn)的詳細(xì)映射,包括每個(gè)端點(diǎn)支持的 HTTP 方法。
/actuator/beans:提供應(yīng)用程序中所有 Spring beans 的完整列表,包括它們的名稱、類型和依賴項(xiàng)等信息。
解釋 Spring Boot 配置文件的概念及其使用方法
Spring Boot 配置文件提供了一種管理不同環(huán)境或部署場景的應(yīng)用程序配置的方法。通過配置文件,您可以為開發(fā)、測試、生產(chǎn)和任何其他特定環(huán)境定義不同的配置集。
以下是 Spring Boot 配置文件如何工作以及如何使用它們的簡要說明:
定義配置文件:在 Spring Boot 應(yīng)用程序中,您可以通過為每個(gè)環(huán)境創(chuàng)建單獨(dú)的屬性文件來定義配置文件。例如,您可以將其application-dev.properties用于開發(fā)環(huán)境、application-test.properties測試環(huán)境和application-prod.properties生產(chǎn)環(huán)境。
激活配置文件:可以通過多種方式激活配置文件:
通過在啟動應(yīng)用程序時(shí)將屬性設(shè)置spring.profiles.active為application.properties命令行參數(shù)或?qū)⑵湓O(shè)置為命令行參數(shù)。
通過@ActiveProfiles在測試中使用類級別的注釋。
通過使用系統(tǒng)環(huán)境變量或 JVM 系統(tǒng)屬性來指定活動配置文件。
配置文件特定的配置:一旦激活配置文件,Spring Boot 將加載相應(yīng)的屬性文件并應(yīng)用其中定義的配置。例如,如果dev配置文件處于活動狀態(tài)。Spring Boot 將加載該application-dev.properties文件并應(yīng)用其中定義的配置。
覆蓋配置:特定于配置文件的配置可以覆蓋application.properties或其他屬性文件中定義的默認(rèn)配置。這允許您專門針對每個(gè)環(huán)境自定義某些設(shè)置,而無需修改核心應(yīng)用程序代碼。
Bean 和組件掃描:配置文件還可以用于控制 Bean 和組件掃描過程。您可以使用 來注釋 bean 或組件,@Profile以指定它們僅應(yīng)在特定配置文件處于活動狀態(tài)時(shí)創(chuàng)建和注冊。
Spring Boot 的默認(rèn)配置文件:Spring Boot 提供了一些默認(rèn)配置文件,例如default、dev、test和prod。默認(rèn)情況下,該default配置文件始終處于活動狀態(tài),可以根據(jù)部署環(huán)境激活其他配置文件。
Spring Boot 中常用的注解有哪些?
以下是一些常用的 Spring Boot 注解:
@SpringBootApplication:該注解用于標(biāo)記Spring Boot應(yīng)用程序的主類。它結(jié)合了三個(gè)注釋:@Configuration、@EnableAutoConfiguration和@ComponentScan。它可以在您的應(yīng)用程序中啟用自動配置和組件掃描。
@RestController:該注解用于表明一個(gè)類是一個(gè)RESTful控制器。它結(jié)合了@Controller和@ResponseBody注釋。它無需使用 來注釋每個(gè)方法,從而簡化了 RESTful Web 服務(wù)的開發(fā)@ResponseBody。
@RequestMapping:此注釋用于將 HTTP 請求映射到特定的處理程序方法。它可以應(yīng)用于類級別,為類中的所有方法指定基本 URL,也可以應(yīng)用于方法級別,為特定處理程序方法定義 URL 和 HTTP 方法。
@Autowired:此注釋用于自動將依賴項(xiàng)連接到 Spring 管理的 bean 中。它允許Spring自動發(fā)現(xiàn)并注入所需的bean,而不需要顯式的bean配置。
@Value:此注釋用于將屬性文件或環(huán)境變量中的值注入到 Spring Beans 中。它可用于注入簡單的值(如字符串或數(shù)字)以及復(fù)雜的對象。
@Configuration:該注解用于指示一個(gè)類向Spring應(yīng)用程序上下文提供配置。它經(jīng)常與 結(jié)合使用@Bean來定義 bean 和其他配置元素。
@ComponentScan:該注解用于指定掃描 Spring 組件的基礎(chǔ)包,例如控制器、服務(wù)和存儲庫。它允許 Spring 在應(yīng)用程序上下文中自動發(fā)現(xiàn)并注冊這些組件。
@EnableAutoConfiguration:該注解啟用了Spring Boot的自動配置機(jī)制,該機(jī)制根據(jù)依賴關(guān)系和類路徑自動配置各種組件和bean。
@Conditional:此注釋用于根據(jù)某些條件有條件地啟用或禁用 Bean 和配置。它允許您根據(jù)特定條件或環(huán)境設(shè)置自定義應(yīng)用程序的行為。
中級 Spring Boot 面試問題
注釋有什么用@ConfigurationProperties?
Spring Boot 中的注解@ConfigurationProperties用于將外部配置屬性綁定到 Java 類。它提供了一種便捷的方法將配置文件中定義的屬性(例如application.properties或application.yml)映射到配置類中的相應(yīng)字段。
使用的好處@ConfigurationProperties包括:
類型安全:注釋確保配置屬性綁定到配置類中定義的適當(dāng)類型,防止類型不匹配和潛在的運(yùn)行時(shí)錯誤。
屬性驗(yàn)證:您可以使用 Spring 提供的各種驗(yàn)證注解來驗(yàn)證屬性,例如@NotNull、@Min、@Max和自定義驗(yàn)證。
分層屬性映射:您可以定義嵌套的配置類來表示復(fù)雜的配置結(jié)構(gòu),并將它們分層映射到相應(yīng)的屬性。
易于集成:帶注釋的配置類可以輕松自動裝配并在整個(gè)應(yīng)用程序中使用,從而簡化了不同組件中配置值的檢索。
這是使用的示例@ConfigurationProperties:
文章來源地址http://www.zghlxwxcb.cn/article/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
文章來源:http://www.zghlxwxcb.cn/article/411.html
在此示例中,該類MyAppConfiguration使用@ConfigurationProperties“myapp”進(jìn)行注釋并指定前綴。配置文件中以“myapp”為前綴定義的屬性將綁定到該類中的相應(yīng)字段。
Spring Boot如何支持微服務(wù)架構(gòu)?
Spring Boot 為構(gòu)建基于微服務(wù)的應(yīng)用程序提供了廣泛的支持。它提供了一系列功能和集成,可簡化微服務(wù)的開發(fā)、部署和管理。以下是 Spring Boot 支持微服務(wù)架構(gòu)的方式:
Spring Cloud:Spring Boot 與 Spring Cloud 無縫集成,Spring Cloud 是一組旨在構(gòu)建和操作云原生微服務(wù)的工具和框架。Spring Cloud提供了服務(wù)發(fā)現(xiàn)、客戶端負(fù)載均衡、分布式配置管理、斷路器等能力。
微服務(wù)設(shè)計(jì)模式:Spring Boot 采用微服務(wù)設(shè)計(jì)模式,例如使用 RESTful API 進(jìn)行服務(wù)之間的通信、用于可擴(kuò)展性的無狀態(tài)服務(wù)以及分散式數(shù)據(jù)管理。它提供了一個(gè)輕量級且靈活的框架,使開發(fā)人員能夠輕松實(shí)現(xiàn)這些模式。
服務(wù)注冊和發(fā)現(xiàn):Spring Boot 與服務(wù)注冊和發(fā)現(xiàn)工具集成,例如 Netflix Eureka 和 Consul。這些工具允許微服務(wù)向注冊表注冊并動態(tài)發(fā)現(xiàn)其他服務(wù)。這有助于實(shí)現(xiàn)服務(wù)彈性、負(fù)載平衡和自動服務(wù)發(fā)現(xiàn)。
外部化配置:Spring Boot 支持外部化配置,允許根據(jù)環(huán)境或特定部署需求輕松配置微服務(wù)。它可以將配置與代碼分離,從而更輕松地跨多個(gè)微服務(wù)管理配置屬性。
分布式跟蹤和監(jiān)控:Spring Boot 與 Zipkin 和 Sleuth 等分布式跟蹤系統(tǒng)集成,支持跨多個(gè)微服務(wù)跟蹤請求。它還提供與 Prometheus 和 Grafana 等監(jiān)控工具的集成,以監(jiān)控微服務(wù)的運(yùn)行狀況、性能和資源使用情況。
彈性和容錯:Spring Boot 支持使用斷路器(例如 Netflix Hystrix)等功能來實(shí)現(xiàn)容錯微服務(wù),這有助于防止分布式系統(tǒng)中的級聯(lián)故障。它還提供了處理微服務(wù)交互中的重試、超時(shí)和回退的機(jī)制。
容器化和部署:Spring Boot 應(yīng)用程序可以使用 Docker 等技術(shù)輕松容器化,從而允許使用 Kubernetes 等容器編排平臺無縫部署和擴(kuò)展微服務(wù)。
什么是 Spring 數(shù)據(jù)?Spring Boot 中使用了哪些不同的 Spring Data Starter?
Spring Data 是 Spring Framework 的一個(gè)子項(xiàng)目,它通過為不同的數(shù)據(jù)存儲技術(shù)提供統(tǒng)一的編程模型來簡化數(shù)據(jù)訪問。它減少了樣板代碼并允許開發(fā)人員專注于業(yè)務(wù)邏輯。Spring Data 支持關(guān)系數(shù)據(jù)庫、NoSQL 數(shù)據(jù)庫等。它利用存儲庫來抽象數(shù)據(jù)訪問操作,從而無需手動 CRUD 代碼。Spring Data 的啟動器為特定數(shù)據(jù)庫提供預(yù)配置的依賴項(xiàng)和自動配置,從而簡化了設(shè)置過程。使用Spring Data,開發(fā)人員可以輕松地與數(shù)據(jù)源交互,并受益于其強(qiáng)大的查詢功能。
以下是針對不同類型數(shù)據(jù)庫的 Spring Data 入門示例:
spring-boot-starter-data-jpa:此啟動器提供對 Java Persistence API (JPA) 和 Hibernate 的支持。它包括使用 JPA 處理關(guān)系數(shù)據(jù)庫所需的依賴項(xiàng)和配置。
spring-boot-starter-data-mongodb:此啟動器提供對流行的 NoSQL 數(shù)據(jù)庫 MongoDB 的支持。它包括使用 Spring Data MongoDB 處理 MongoDB 所需的依賴項(xiàng)和配置。
spring-boot-starter-data-redis:此啟動器提供對內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲 Redis 的支持。它包括使用 Spring Data Redis 處理 Redis 所需的依賴項(xiàng)和配置。
spring-boot-starter-data-cassandra:此啟動器提供對 Apache Cassandra(一種高度可擴(kuò)展的 NoSQL 數(shù)據(jù)庫)的支持。它包括使用 Spring Data Cassandra 處理 Cassandra 所需的依賴項(xiàng)和配置。
spring-boot-starter-data-elasticsearch:此啟動器為分布式搜索和分析引擎 Elasticsearch 提供支持。它包括使用 Spring Data Elasticsearch 來使用 Elasticsearch 所需的依賴項(xiàng)和配置。
如何在 Spring Boot 應(yīng)用程序中使用 RESTful Web 服務(wù)?
在 Spring Boot 應(yīng)用程序中,您可以使用 RestTemplate 或 WebClient 使用 RESTful Web 服務(wù)。RestTemplate 提供了用于發(fā)出 HTTP 請求的同步 API,而 WebClient 則提供了非阻塞和反應(yīng)式方法。兩者都允許您發(fā)送 GET、POST、PUT、DELETE 請求、處理響應(yīng)數(shù)據(jù)并將其反序列化為 Java 對象。
如何為 Spring Boot 應(yīng)用程序創(chuàng)建和運(yùn)行單元測試?
在 Spring Boot 應(yīng)用程序中,您可以使用 Spring Test 框架創(chuàng)建和運(yùn)行單元測試。@RunWith(SpringRunner.class)通過利用和 等注釋@SpringBootTest,您可以初始化應(yīng)用程序上下文并對 Bean 和組件執(zhí)行測試。
此外,您可以使用 Mockito 或其他模擬框架來模擬依賴項(xiàng)并隔離測試中的單元。借助 JUnit 或 AssertJ 的斷言,您可以驗(yàn)證預(yù)期的行為和斷言。
最后,可以使用 Maven 或 Gradle 等工具來運(yùn)行測試,這些工具執(zhí)行測試并提供有關(guān)測試結(jié)果和覆蓋率的報(bào)告。
如何在Spring Boot應(yīng)用程序中啟用調(diào)試日志?
要在 Spring Boot 應(yīng)用程序中啟用調(diào)試日志,您可以將logging.level application.properties 或 application.yml 文件中的屬性設(shè)置為“DEBUG”。此配置將使日志框架能夠輸出詳細(xì)的調(diào)試信息?;蛘?,您可以使用@Slf4j類上的注釋來啟用該特定類的日志記錄。此外,您可以通過設(shè)置來配置特定包或類的日志記錄級別logging.level.{package/class}此外,您可以通過在配置文件中
要為整個(gè)應(yīng)用程序啟用調(diào)試日志,請使用:
logging.level.<package-name>=DEBUG
要為整個(gè)應(yīng)用程序啟用調(diào)試日志,請使用:
logging.level.root=DEBUG
Spring Boot 如何支持響應(yīng)式編程
Spring Boot 通過與Spring WebFlux集成提供對反應(yīng)式編程的支持。它允許開發(fā)人員構(gòu)建非阻塞、事件驅(qū)動的應(yīng)用程序,這些應(yīng)用程序可以利用反應(yīng)式流和反應(yīng)式編程模型有效地處理大量并發(fā)請求。
如何在 Spring Boot 應(yīng)用程序中啟用安全性?
我們可以使用以下不同的選項(xiàng)。
使用 Spring Security: 通過將 Spring Security Starter 依賴項(xiàng)添加到項(xiàng)目的構(gòu)建配置中來啟用安全性。
OAuth2 和 OpenID Connect:使用 OAuth2 和 OpenID Connect 協(xié)議實(shí)現(xiàn)安全身份驗(yàn)證和授權(quán)。
LDAP 集成: 通過與 LDAP(輕量級目錄訪問協(xié)議)服務(wù)器集成來實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán),從而實(shí)現(xiàn)安全性。
JWT(JSON Web 令牌)身份驗(yàn)證:通過實(shí)施基于 JWT 的身份驗(yàn)證來實(shí)現(xiàn)無狀態(tài)和可擴(kuò)展的身份驗(yàn)證,從而實(shí)現(xiàn)安全性。
自定義身份驗(yàn)證提供程序:通過創(chuàng)建自定義身份驗(yàn)證提供程序以根據(jù)您自己的邏輯處理身份驗(yàn)證來啟用安全性。
Spring Boot DevTools 的目的是什么?我們?nèi)绾螁⒂盟?/h3>
它旨在提高生產(chǎn)力、簡化開發(fā)工作流程并在開發(fā)階段實(shí)現(xiàn)應(yīng)用程序的快速重啟。
以下是 Spring Boot DevTools 的一些主要功能和優(yōu)點(diǎn):
自動重新啟動:DevTools 監(jiān)視類路徑中的任何更改,并在檢測到修改時(shí)自動重新啟動應(yīng)用程序。
實(shí)時(shí)重新加載:DevTools 支持靜態(tài)資源的實(shí)時(shí)重新加載,例如 HTML、CSS 和 JavaScript 文件。
遠(yuǎn)程應(yīng)用程序重啟:DevTools 提供了遠(yuǎn)程觸發(fā)應(yīng)用程序重啟的功能。當(dāng)在分布式環(huán)境中工作或應(yīng)用程序在遠(yuǎn)程服務(wù)器上運(yùn)行時(shí),這非常有用。
開發(fā)人員友好的錯誤頁面:DevTools 提供了增強(qiáng)的錯誤頁面,其中提供了有關(guān)應(yīng)用程序開發(fā)過程中遇到的異常和錯誤的詳細(xì)信息。
配置屬性支持:DevTools 支持 Spring Boot 配置屬性的熱重載。對 application.properties 或 application.yml 文件所做的更改會自動應(yīng)用,無需重新啟動應(yīng)用程序,從而可以快速更新配置。
數(shù)據(jù)庫控制臺:DevTools 包括一個(gè)嵌入式數(shù)據(jù)庫控制臺,它提供基于 Web 的界面來與應(yīng)用程序的數(shù)據(jù)庫進(jìn)行交互。這使得開發(fā)人員可以輕松執(zhí)行 SQL 查詢、查看和修改數(shù)據(jù)以及執(zhí)行其他與數(shù)據(jù)庫相關(guān)的任務(wù),而無需外部工具。
要在 Spring Boot 應(yīng)用程序中啟用 Spring Boot DevTools,您需要包含適當(dāng)?shù)囊蕾図?xiàng)和配置。以下是啟用 DevTools 的步驟:
添加 DevTools 依賴項(xiàng):在您的pom.xml文件(對于 Maven)或build.gradle文件(對于 Gradle)中,添加以下依賴項(xiàng):
<!-- 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啟用自動重啟:默認(rèn)情況下,為使用命令或從 IDE運(yùn)行的應(yīng)用程序啟用 DevTools 。但是,您還可以通過將以下配置屬性添加到您的application.properties或application.yml文件中來為打包應(yīng)用程序啟用它:
spring.devtools.restart.enabled=true
針對有經(jīng)驗(yàn)的人的高級 Spring Boot 面試問題
如何在 Spring Boot 應(yīng)用程序中啟用 HTTPS?
要在 Spring Boot 應(yīng)用程序中啟用 HTTPS,您需要配置應(yīng)用程序的服務(wù)器屬性并提供必要的 SSL/TLS 證書。以下是啟用 HTTPS 的一般步驟:
獲取 SSL/TLS 證書:從受信任的證書頒發(fā)機(jī)構(gòu) (CA) 獲取 SSL/TLS 證書或生成自簽名證書以用于開發(fā)/測試目的。
配置服務(wù)器屬性:使用以下服務(wù)器配置更新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為密鑰庫文件的路徑,并設(shè)置適當(dāng)?shù)拿艽a和別名值。
提供 SSL/TLS 證書:放置 SSL/TLS 證書文件 (keystore.p12 ) 放在類路徑中或在服務(wù)器屬性中指定絕對文件路徑。
重新啟動應(yīng)用程序:重新啟動 Spring Boot 應(yīng)用程序以使更改生效。
完成這些步驟后,您的 Spring Boot 應(yīng)用程序?qū)⑴渲脼槭褂?HTTPS。https://localhost:8443您可以使用服務(wù)器配置中指定的適當(dāng)主機(jī)名和端口來訪問應(yīng)用程序。
如何在Spring Boot中配置外部配置
要在 Spring Boot 中的項(xiàng)目外部配置外部配置,可以使用以下方法之一:
外部配置文件:您可以使用和屬性指定外部配置文件的位置,而不是將application.properties或application.yml文件放置在項(xiàng)目中。例如,您可以將配置文件放置在單獨(dú)的目錄中,并通過命令行或環(huán)境變量提供其位置。spring.config.namespring.config.location
操作系統(tǒng)環(huán)境變量:您可以利用操作系統(tǒng)提供的環(huán)境變量來配置 Spring Boot 應(yīng)用程序。@Value將所需的配置屬性定義為環(huán)境變量,并使用注釋或?qū)ο笤趹?yīng)用程序中訪問它們Environment。
Spring Cloud Config:如果您有更復(fù)雜的配置設(shè)置或需要集中配置管理,可以使用 Spring Cloud Config。它提供了一個(gè)服務(wù)器端組件,您可以在其中存儲和管理多個(gè)應(yīng)用程序的配置。然后,您的 Spring Boot 應(yīng)用程序可以從 Spring Cloud Config 服務(wù)器獲取其配置。
配置服務(wù)器:另一種選擇是使用外部配置服務(wù)器,例如 Apache ZooKeeper 或 HashiCorp Consul。這些服務(wù)器充當(dāng)配置的中央存儲庫,并且可以由多個(gè)應(yīng)用程序訪問。
如何使用 Maven 創(chuàng)建 Spring Boot 應(yīng)用程序?
要使用 Maven 創(chuàng)建 Spring Boot 應(yīng)用程序,請執(zhí)行以下步驟:
設(shè)置 Maven:確保 Maven 已安裝在您的系統(tǒng)上。您可以從 Apache Maven 網(wǎng)站下載 Maven 并按照安裝說明進(jìn)行操作。
創(chuàng)建 Maven 項(xiàng)目:打開命令行或終端并導(dǎo)航到要在其中創(chuàng)建項(xiàng)目的目錄。使用以下 Maven 命令創(chuàng)建新項(xiàng)目:
mvn archetype:generate -DgroupId=com.example -DartifactId=my-spring-boot-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
此命令使用指定的groupId和來創(chuàng)建一個(gè)新的 Maven 項(xiàng)目artifactId。根據(jù)項(xiàng)目的需要調(diào)整這些值。
添加 Spring Boot Starter 依賴項(xiàng):打開pom.xml項(xiàng)目文件并為 Spring Boot 添加以下依賴項(xiàng):
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.2</version> </dependency> </dependencies>
此依賴項(xiàng)包括您的應(yīng)用程序必需的 Spring Boot 庫。
創(chuàng)建 Spring Boot 主類:在 Maven 項(xiàng)目的相應(yīng)包中創(chuàng)建一個(gè)新的 Java 類。此類將作為 Spring Boot 應(yīng)用程序的入口點(diǎn)。這是一個(gè)例子:
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注釋結(jié)合了基本 Spring Boot 應(yīng)用程序所需的多個(gè)注釋。
構(gòu)建并運(yùn)行應(yīng)用程序:使用以下 Maven 命令構(gòu)建并運(yùn)行 Spring Boot 應(yīng)用程序:
mvn spring-boot:run
Maven 將構(gòu)建您的項(xiàng)目、解決依賴關(guān)系并啟動 Spring Boot 應(yīng)用程序。
應(yīng)用程序運(yùn)行后,您可以使用http://localhost:8080(默認(rèn)情況下)或指定的端口(如果您已自定義)在 Web 瀏覽器中訪問它。
就是這樣!您已經(jīng)使用 Maven 創(chuàng)建了一個(gè) Spring Boot 應(yīng)用程序。您現(xiàn)在可以添加其他依賴項(xiàng)、配置應(yīng)用程序并開發(fā)所需的功能。
條件注釋有哪些不同類型?
Spring Boot 中一些常用的條件注釋有:
@ConditionalOnClass:如果類路徑中存在特定類,則此注釋會配置 bean 或組件。
@ConditionalOnMissingClass:如果類路徑中不存在特定類,則此注釋會配置 bean 或組件。
@ConditionalOnBean:僅當(dāng)應(yīng)用程序上下文中存在另一個(gè)特定 bean 時(shí),此注釋才會配置 bean 或組件。
@ConditionalOnMissingBean:僅當(dāng)應(yīng)用程序上下文中不存在另一個(gè)特定 bean 時(shí),此注釋才會配置 bean 或組件。
@ConditionalOnProperty:此注釋根據(jù)應(yīng)用程序配置文件中特定屬性的值來配置 bean 或組件。
@ConditionalOnExpression:此注釋基于 SpEL(Spring 表達(dá)式語言)表達(dá)式配置 bean 或組件。
@ConditionalOnWebApplication:僅當(dāng)應(yīng)用程序是 Web 應(yīng)用程序時(shí),此注釋才配置 bean 或組件。
@ConditionalOnNotWebApplication:僅當(dāng)應(yīng)用程序不是 Web 應(yīng)用程序時(shí),此注釋才配置 bean 或組件。
您能否解釋一下 Spring Boot Actuator 健康檢查以及創(chuàng)建自定義健康指標(biāo)的過程?
運(yùn)行狀況檢查提供有關(guān)應(yīng)用程序整體運(yùn)行狀況的寶貴信息,例如數(shù)據(jù)庫連接、外部服務(wù)可用性或您定義的任何其他自定義檢查。
默認(rèn)情況下,Spring Boot Actuator 提供一組預(yù)定義的運(yùn)行狀況指示器,用于檢查數(shù)據(jù)庫、磁盤空間等各種組件的運(yùn)行狀況。但是,您還可以創(chuàng)建自定義運(yùn)行狀況指示器來監(jiān)控應(yīng)用程序的特定方面。
要創(chuàng)建自定義運(yùn)行狀況指示器,您需要實(shí)現(xiàn)該HealthIndicator接口并重寫該health()方法。該health()方法應(yīng)返回 的實(shí)例Health,它表示自定義組件的運(yùn)行狀況。您可以使用該類Health來指示組件是啟動、關(guān)閉還是處于未知狀態(tài)。
以下是自定義運(yùn)行狀況指示器的示例:
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實(shí)現(xiàn)該HealthIndicator接口并重寫該health()方法。在該health()方法內(nèi)部,您可以編寫自定義運(yùn)行狀況檢查邏輯。如果組件正常,則可以返回Health.up()。否則,您可以Health.down()使用該方法返回附加詳細(xì)信息withDetail()。
一旦創(chuàng)建了自定義健康指示器,Spring Boot Actuator就會自動檢測到它,并且它的健康檢查將通過/actuator/health。
如何在 Spring Boot 中創(chuàng)建自定義執(zhí)行器端點(diǎn)?
要在 Spring Boot 中創(chuàng)建自定義 Actuator 端點(diǎn),您可以按照以下步驟操作:
創(chuàng)建自定義端點(diǎn):創(chuàng)建一個(gè)代表您的自定義端點(diǎn)的新類。此類應(yīng)使用 進(jìn)行注釋@Endpoint以表明它是 Actuator 端點(diǎn)。您還可以使用其他注釋(例如@ReadOperation、@WriteOperation、 或 )@DeleteOperation來定義端點(diǎn)支持的操作類型。
定義端點(diǎn)操作:在自定義端點(diǎn)類中,定義端點(diǎn)應(yīng)執(zhí)行的操作。您可以將注釋用于@ReadOperation只讀操作、@WriteOperation寫入操作和@DeleteOperation刪除操作。這些注釋有助于定義端點(diǎn)的 HTTP 方法和請求映射。
實(shí)現(xiàn)端點(diǎn)邏輯:實(shí)現(xiàn)自定義端點(diǎn)的每個(gè)操作的邏輯。這可以包括檢索信息、修改應(yīng)用程序狀態(tài)或執(zhí)行任何其他所需的操作。您可以根據(jù)您的具體要求靈活地定義功能。
(可選)添加安全配置:如果您的自定義端點(diǎn)需要安全限制,您可以通過添加安全注解或修改應(yīng)用程序的安全配置來進(jìn)行配置。
以下是創(chuàng)建自定義 Actuator 端點(diǎn)的示例:
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使用 進(jìn)行注釋,@Endpoint將其定義為 Actuator 端點(diǎn)。它有兩個(gè)操作:getInformation()注釋為@ReadOperation用于檢索信息,updateInformation()注釋@WriteOperation為用于更新信息。
創(chuàng)建自定義端點(diǎn)后,它將自動注冊到 Spring Boot Actuator,您可以通過/actuator基本路徑和端點(diǎn) ID 來訪問它。在這種情況下,可以通過 訪問自定義端點(diǎn)/actuator/customEndpoint。
如何在 Spring Boot 應(yīng)用程序中啟用 CORS(跨域資源共享)?
要在 Spring Boot 應(yīng)用程序中啟用跨域資源共享 (CORS),您可以按照以下步驟操作:
添加 CORS 配置:創(chuàng)建一個(gè)配置類并對其進(jìn)行注釋@Configuration以定義 CORS 配置。在類內(nèi)部,創(chuàng)建一個(gè) bean 類型CorsFilter來配置 CORS 設(shè)置。
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 標(biāo)頭 ( *)。您可以根據(jù)您的具體要求自定義這些設(shè)置。
啟用 Web MVC 配置:如果您還沒有這樣做,請確保通過@EnableWebMvc在配置類上使用注釋或擴(kuò)展該類來在 Spring Boot 應(yīng)用程序中啟用 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 應(yīng)用程序中啟用 CORS 后,您可以通過向端點(diǎn)發(fā)出跨源請求來測試它。確保響應(yīng)中包含必要的 CORS 標(biāo)頭,例如Access-Control-Allow-Origin、Access-Control-Allow-Methods和Access-Control-Allow-Headers。
啟用 CORS 允許您的 Spring Boot 應(yīng)用程序處理跨域請求并做出適當(dāng)?shù)捻憫?yīng)??紤]安全影響并根據(jù)應(yīng)用程序的要求和安全策略配置 CORS 設(shè)置非常重要。
如何在 Spring Boot 應(yīng)用程序中安排任務(wù)?
在 Spring Boot 應(yīng)用程序中,您可以使用@ScheduledSpringTask Scheduling功能提供的注釋來安排任務(wù)。以下是如何在 Spring Boot 應(yīng)用程序中安排任務(wù):
啟用調(diào)度:首先,確保在 Spring Boot 應(yīng)用程序中啟用任務(wù)調(diào)度。@EnableScheduling這可以通過在配置類上使用注釋或通過在主應(yīng)用程序類上添加@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 }
創(chuàng)建計(jì)劃任務(wù)方法:在應(yīng)用程序中定義要計(jì)劃的方法。@Scheduled使用 cron、固定延遲或固定速率注釋該方法并指定所需的調(diào)度表達(dá)式。
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()根據(jù)提供的 cron 表達(dá)式,該方法計(jì)劃在每天上午 8 點(diǎn)運(yùn)行。
測試計(jì)劃任務(wù):定義計(jì)劃任務(wù)后,您可以啟動 Spring Boot 應(yīng)用程序并觀察計(jì)劃任務(wù)根據(jù)指定的計(jì)劃執(zhí)行。
該@Scheduled注釋提供了多個(gè)用于指定調(diào)度表達(dá)式的選項(xiàng),包括 cron 表達(dá)式、固定延遲和固定速率。您可以根據(jù)您的日程安排要求選擇最合適的選項(xiàng)。
如何在 Spring Boot 應(yīng)用程序中啟用緩存?
要在 Spring Boot 應(yīng)用程序中啟用緩存,您可以按照以下步驟操作:
添加緩存依賴項(xiàng):確保項(xiàng)目的依賴項(xiàng)中包含必要的緩存依賴項(xiàng)。Spring Boot 提供對 Ehcache、Redis 和 Caffeine 等各種緩存提供程序的支持。將相應(yīng)的緩存依賴項(xiàng)添加到項(xiàng)目的pom.xml文件中。
例如,要使用 Ehcache 緩存提供程序,請?zhí)砑右韵乱蕾図?xiàng):
<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 應(yīng)用程序中啟用緩存,請將@EnableCaching注釋添加到配置類中。此注釋啟用 Spring 的緩存基礎(chǔ)結(jié)構(gòu)并為應(yīng)用程序緩存做好準(zhǔn)備。
import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Configuration; @Configuration @EnableCaching public class CachingConfig { // Additional configuration if needed }
為緩存注釋方法:確定應(yīng)用程序中要緩存的方法,并使用適當(dāng)?shù)木彺孀⑨寣ζ溥M(jìn)行注釋。@CacheableSpring Boot 為緩存操作提供了、@CachePut、 等注解@CacheEvict。
例如,假設(shè)您有一個(gè)從數(shù)據(jù)庫檢索數(shù)據(jù)的方法,并且您想要緩存結(jié)果。您可以使用注釋該方法并@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”。第一次使用特定鍵調(diào)用此方法時(shí),將獲取并緩存數(shù)據(jù)。使用相同鍵的后續(xù)調(diào)用將從緩存中檢索數(shù)據(jù),而不是執(zhí)行該方法。
配置緩存設(shè)置:如果您需要自定義緩存行為,您可以提供特定于您選擇的緩存提供程序的其他配置屬性。application.properties這些配置屬性可以在或文件中設(shè)置application.yml。
例如,如果您使用Ehcache,您可以在文件中配置緩存設(shè)置ehcache.xml,并在文件中指定文件的位置application.properties。
通過執(zhí)行以下步驟,您可以在 Spring Boot 應(yīng)用程序中啟用緩存,并利用緩存的優(yōu)勢來提高性能并減少數(shù)據(jù)庫或外部服務(wù)調(diào)用。
總結(jié)
總之,這些 Spring Boot 面試問題涵蓋了與 Spring Boot、其功能和最佳實(shí)踐相關(guān)的廣泛主題。通過熟悉這些問題及其答案,您可以更好地準(zhǔn)備 Spring Boot 面試,并展示您在開發(fā) Spring Boot 應(yīng)用程序方面的知識和專業(yè)知識。
到此這篇關(guān)于30 多個(gè)Spring Boot面試問題及答案的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!