Spring Boot面試問題| Baeldung
Spring Boot一直是Spring生態系統的關鍵參與者。該專案透過其自動配置功能使我們的生活更加輕鬆。在本教程中,我們將介紹在求職面試中可能出現的一些與Spring Boot相關的最常見問題。
Spring和Spring Boot有什麼區別?
Spring Framework提供了多種功能,使Web應用程式的開發更加容易。這些功能包括依賴注入,資料繫結,面向方面的程式設計,資料訪問等等。
多年來,Spring變得越來越複雜,這種應用程式所需的配置量可能會令人生畏。這就是Spring Boot派上用場的地方 - 它使配置Spring應用程式變得輕而易舉。
從本質上講,雖然Spring是不受歡迎的,但Spring Boot對平臺和庫有了自己的看法,讓我們快速入門。
以下是Spring Boot帶來的兩個最重要的好處:
- 根據在類路徑中找到的工件自動配置應用程式
- 提供生產中應用程式通用的非功能性功能,例如安全性或健康檢查
更多SpringBoot教程
我們如何使用Maven設定Spring Boot應用程式?
我們可以像在任何其他庫中一樣在Maven專案中包含Spring Boot。但是,最好的方法是從spring-boot-starter-parent專案繼承並宣告對Spring Boot啟動器的依賴。這樣做可以讓我們的專案重用Spring Boot的預設設定。
繼承spring-boot-starter-parent專案非常簡單 - 我們只需要在pom.xml中指定一個父元素:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> |
我們可以在Maven Central找到最新版本的 spring-boot-starter-parent。
使用啟動父專案很方便,但並不總是可行。例如,如果我們公司要求所有專案都從標準POM繼承,我們就不能依賴Spring Boot的啟動父級。
在這種情況下,我們仍然可以透過此POM元素獲得依賴關係管理的好處:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> |
有什麼Spring Boot啟動器可供選擇嗎?
依賴管理是任何專案的關鍵方面。當專案足夠複雜時,管理依賴項可能會變成一場噩夢,因為涉及的工件太多了。
這是Spring Boot入門者派上用場的地方。每個入門者都可以作為我們所需的所有Spring技術的一站式服務。然後,以一致的方式傳遞和管理其他所需的依賴關係。
所有啟動器都在org.springframework.boot組下,其名稱以spring-boot-starter-開頭 。這種命名模式使您可以輕鬆找到啟動器,尤其是在使用支援按名稱搜尋依賴關係的IDE時。
在撰寫本文時,我們有超過50個啟動器。最常用的是:
- spring-boot-starter: 核心啟動器,包括自動配置支援,日誌記錄和YAML
- spring-boot-starter-aop: 使用Spring AOP和AspectJ進行面向方面程式設計的啟動器
- spring-boot-starter-data-jpa: 使用Spring Data JPA和Hibernate的啟動器
- spring-boot-starter-jdbc: 用於將JDBC與HikariCP連線池一起使用的啟動器
- spring-boot-starter-security: 使用Spring Security的啟動器
- spring-boot-starter-test: 用於測試Spring Boot應用程式的啟動器
- spring-boot-starter-web: 用於構建Web的入門者,包括使用Spring MVC的RESTful應用程式
有關啟動器的完整列表,請參閱此儲存庫
如何禁用特定的自動配置?
如果我們要禁用特定的自動配置,我們可以使用@EnableAutoConfiguration批註的exclude屬性來指示它
// other annotations @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class) public class MyConfiguration { } |
如果我們使用@SpringBootApplication批註啟用自動配置- 它具有@EnableAutoConfiguration作為元註釋 - 我們可以使用相同名稱的屬性禁用自動配置:
// other annotations @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class MyConfiguration { } |
我們還可以使用spring.autoconfigure.exclude環境屬性禁用自動配置。application.properties檔案中的此設定與以前相同:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration |
如何註冊自定義自動配置?
要註冊自動配置類,我們必須在META-INF / spring.factories檔案中的EnableAutoConfiguration鍵下列出其完全限定名稱:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration |
如果我們使用Maven構建一個專案,那麼該檔案應放在resources / META-INF目錄中,該目錄將在程式打包階段找到該檔案。
如何告訴自動配置在bean已經存在情況下退回?
要指示自動配置類在bean已經存在時退出,我們可以使用 @ConditionalOnMissingBean批註。此註釋的最顯著屬性是:
- value:要檢查的bean型別
- name:要檢查的bean的名稱
放置在使用@Bean裝飾的方法上時,目標型別預設為方法的返回型別:
@Configuration public class CustomConfiguration { @Bean @ConditionalOnMissingBean public CustomService service() { ... } } |
如何將Spring Boot Web應用程式部署為JAR和WAR檔案?
傳統上,我們將Web應用程式打包為WAR檔案,然後將其部署到外部伺服器中。這樣做可以讓我們在同一臺伺服器上安排多個應用程式。在CPU和記憶體稀缺的時候,這是節省資源的好方法。
但事情發生了變化。計算機硬體現在相當便宜,而且注意力轉向伺服器配置。在部署期間配置伺服器的一個小錯誤可能會導致災難性後果。
Spring透過提供一個外掛即spring-boot-maven-plugin來解決這個問題,將Web應用程式打包為可執行的JAR。要包含此外掛,只需向pom.xml新增一個外掛元素:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> |
有了這個外掛,我們將在執行打包階段後生成一個胖JAR 。此JAR包含所有必需的依賴項,包括嵌入式伺服器。因此,我們不再需要擔心配置外部伺服器。
然後我們就像普通的可執行JAR一樣執行應用程式。
請注意,必須將pom.xml檔案中的packaging元素設定為 jar 才能構建JAR檔案:
<packaging>jar</packaging>
執行Maven 打包階段後,我們將擁有一個可部署的WAR檔案。
如何將Spring Boot用於命令列應用程式?
與任何其他Java程式一樣,Spring Boot命令列應用程式必須具有 main方法。此方法用作入口點,它呼叫SpringApplication#run方法來引導應用程式:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class); // other statements } } |
然後SpringApplication類啟動一個Spring容器並自動配置bean。
請注意,我們必須將配置類傳遞給run方法才能用作主要配置源。按照慣例,這個引數是入門類本身。
在呼叫run方法之後,我們可以像在常規程式中那樣執行其他語句。
有哪些可能的外部配置源?
Spring Boot支援外部配置,允許我們在各種環境中執行相同的應用程式。我們可以使用屬性檔案,YAML檔案,環境變數,系統屬性和命令列選項引數來指定配置屬性。
然後,我們可以訪問使用這些屬性@Value註釋,經由繫結物件 的@ConfigurationProperties註釋,或環境抽象。
以下是最常見的外部配置來源:
- 命令列屬性:命令列選項引數是以雙連字元開頭的程式引數,例如-server.port = 8080。Spring Boot將所有引數轉換為屬性,並將它們新增到環境屬性集中。
- 應用程式屬性:應用程式屬性是從application.properties檔案或其YAML對應檔案載入的屬性。預設情況下,Spring Boot會在當前目錄,類路徑根或其config子目錄中搜尋此檔案。
- 特定於配置檔案的屬性:特定於配置檔案的屬性從application- {profile} .properties檔案或其YAML對應檔案載入。{profile}是指啟用的Profile名稱。這些檔案與非特定屬性檔案位於相同位置,並且優先於非特定屬性檔案。
Spring Boot支援輕鬆繫結是什麼意思?
Spring Boot中的輕鬆繫結適用於配置屬性的型別安全繫結。
使用寬鬆繫結時,環境屬性的鍵不需要與屬性名稱完全匹配。這樣的環境屬性可以用駝峰camelCase,kebab-case,snake_case或大寫字母寫成,單詞用下劃線分隔。
例如,如果具有@ConfigurationProperties批註的bean類中的屬性名為myProp,則可以將其繫結到以下任何環境屬性:myProp,my-prop,my_prop或MY_PROP。
什麼是Spring Boot DevTools?
Spring Boot Developer Tools或DevTools是一組工具,使開發過程更容易。要包含這些開發時功能,我們只需要在pom.xml檔案中新增依賴項:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> |
在生產執行模組,Spring Boot devtools將自動禁用。預設情況下,重新打包存檔也會排除此模組。因此,它不會給我們的最終產品帶來任何開銷。
預設情況下,DevTools應用適合開發環境的屬性。這些屬性禁用模板快取,為Web組啟用除錯日誌記錄,等等。因此,我們擁有這種合理的開發時配置,而無需設定任何屬性。
只要類路徑上的檔案發生更改,使用DevTools的應用程式就會重新啟動。這是開發中非常有用的功能,因為它可以快速反饋修改。
預設情況下,靜態資源(包括檢視模板)不會啟動重新啟動。相反,資源更改會觸發瀏覽器重新整理。請注意,只有在瀏覽器中安裝LiveReload擴充套件以與DevTools包含的嵌入式LiveReload伺服器進行互動時,才會發生這種情況。
Idea中要透過執行配置進行專門配置。
如何編寫整合測試?
在為Spring應用程式執行整合測試時,我們必須有一個ApplicationContext。
為了讓我們的生活更輕鬆,Spring Boot為測試提供了一個特殊的註釋 - @SpringBootTest。此批註從其classes屬性指示的配置類建立ApplicationContext。
如果未設定classes屬性,Spring Boot將搜尋主配置類。搜尋從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration註釋的類。
請注意,如果我們使用JUnit 4,我們必須使用@RunWith(SpringRunner.class)修飾測試類。
什麼是Spring Boot Actuator
從本質上講,Actuator透過支援生產就緒功能,將Spring Boot應用程式變為現實。這些功能使我們能夠在生產中執行時監控和管理應用程式。
將Spring Boot Actuator整合到一個專案中非常簡單。我們需要做的就是在pom.xml檔案中包含 spring-boot-starter-actuator starter :
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> |
Spring Boot Actuator可以使用HTTP或JMX端點公開操作資訊。但是,大多數應用程式都使用HTTP,其中端點的標識和/執行器字首形成URL路徑。
以下是Actuator提供的一些最常見的內建端點:
- auditevents: 公開審計事件資訊
- env: 公開環境屬性
- health: 顯示應用程式執行狀況資訊
- httptrace: 顯示HTTP跟蹤資訊
- info: 顯示任意應用程式資訊
- metrics: 顯示指標資訊
- loggers: 顯示和修改應用程式中記錄器的配置
- mappings: 顯示所有@RequestMapping路徑的列表
- scheduledtasks: 顯示應用程式中的計劃任務
- threaddump: 執行執行緒轉儲
本教程介紹了您在技術面試中可能遇到的一些關於Spring Boot的最關鍵問題。我們希望他們能幫助您找到理想的工作。點選標題見原文
相關文章
- Spring Boot 面試題Spring Boot面試題
- Spring Boot Reactor Netty配置 | BaeldungSpring BootReactNetty
- GraphQL SPQR和Spring Boot入門 | baeldungSpring Boot
- 基於Spring Batch的Spring Boot的教程 - BaeldungBATSpring Boot
- Spring Boot 面試,一個問題就幹趴下了!Spring Boot面試
- Spring Boot(3)---自定義spring boot starter 問題Spring Boot
- 在Spring Boot設定Swagger 2 - BaeldungSpring BootSwagger
- 加快Spring Boot啟動的幾種方法 | baeldungSpring Boot
- 新一期Spring Boot 面試題Spring Boot面試題
- Spring Boot面試題,你會需要的!Spring Boot面試題
- Spring Boot的Clean架構教程與原始碼 - BaeldungSpring Boot架構原始碼
- Spring Boot 面試,一個問題你就答不上來了Spring Boot面試
- Spring 常見面試問題Spring面試
- 技術乾貨:spring boot面試題及答案Spring Boot面試題
- Spring Boot專案的推薦軟體包結構 - BaeldungSpring Boot
- 使用Spring Boot排程WebSocket推送的教程和原始碼 - BaeldungSpring BootWeb原始碼
- 2019年Spring Boot面試都問了什麼?快看看這22道面試題!Spring Boot面試題
- Spring Boot微服務中的十二因子方法論(12Factor) - BaeldungSpring Boot微服務
- 20 道 Spring Boot 面試題你需要了解下Spring Boot面試題
- Spring Boot面試題(2020最新版)Spring Boot面試題
- Spring面試問題TOP50Spring面試
- 為Spring Boot面試準備13個主題 - javinpaulSpring Boot面試
- Spring boot 解決跨域問題配置類Spring Boot跨域
- Kotlin 與 Spring boot整合,@Value的問題KotlinSpring Boot
- spring boot 註解物件的問題 待研究Spring Boot物件
- 面試題:Spring 的迴圈依賴問題面試題Spring
- 吐血整理 20 道 Spring Boot 面試題,我經常拿來面試別人!Spring Boot面試題
- Spring Boot基礎面試題2020大集合Spring Boot面試題
- 解決angular+spring boot的跨域問題AngularSpring Boot跨域
- 面試時這麼問你Spring Boot,你能答對幾個?面試Spring Boot
- 使用Bucket4j限制Spring API的訪問速率 - BaeldungSpringAPI
- Spring Boot 整合 Seata 解決分散式事務問題Spring Boot分散式
- spring-boot版本問題讓開發懷疑人生Springboot
- Spring boot 和Vue開發中CORS跨域問題Spring BootVueCORS跨域
- spring-boot + jsonp 解決前端跨域問題SpringbootJSON前端跨域
- Spring Boot幾種啟動問題的解決方案Spring Boot
- Spring Cloud Gateway WebFilter工廠 | BaeldungSpringCloudGatewayWebFilter
- 好程式設計師Java培訓分享22道Spring Boot面試題!程式設計師JavaSpring Boot面試題