自Spring Boot誕生以來,就引發了業界轟動,目前愈來愈多的公司技術選型選擇擁抱Spring Boot。因此Spring Boot也成爲面試必問的問題之一。接下來小胖哥總結了一些來開闊你的思路。html
好了接下來直奔主題說說常常在面試中問到的 **Spring Boot **面試題web
Spring Framework提供了多種功能,使Web應用程序的開發更加容易。這些功能包括依賴注入,數據綁定,面向方面的編程,數據訪問等等。
隨着Spring社區的壯大,Spring慢慢變得愈來愈複雜,再也不像開始宣稱的那麼輕量級。 開發應用程序的配置量愈來愈大令開發者頭疼。這時Spring Boot就派上用場了 - 它採用「約定大於配置」的思想簡化了配置,對Spring提供的功能和配置並且將一些功能抽象成爲「Starter」開箱即用、按需引用。極大地簡化了開發。面試
咱們能夠像在任何其餘庫中同樣在Maven項目中包含Spring Boot。可是,最好的方法是從spring-boot-starter-parent
項目繼承並聲明依賴於Spring Boot啓動器。這樣作可讓咱們的項目重用Spring Boot的默認設置。
繼承spring-boot-starter-parent
項目很是簡單 - 咱們只須要在 pom.xml
中指定一個 parent
元素:spring
咱們能夠在Maven 中央倉庫找到最新版本的 spring-boot-starter-parent
。
上面的方式很方便可是並不必定符合實際須要。例如公司要求全部項目依賴構建從一個標準BOM開始,咱們就不能按上面的方式進行。
在這種狀況下,咱們能夠進行以下引用:編程
而後在 dependencies
標籤下引用Spring Boot 的starters 就好了。springboot
依賴管理對於項目相當重要。當項目足夠複雜時,管理依賴項可能會變成一場噩夢,由於涉及的組件太多了。
這就是Spring Boot 的 starter
就派上用場了。每一個starter均可覺得咱們提供所須要的Spring技術的一站式服務。而且以一致的方式傳遞和管理其餘所需的依賴關係。
全部官方starter都在 org.springframework.boot
組下,其名稱以 spring-boot-starter-
開頭 。非官方的starter的名稱在前,如 mybatis-spring-boot-starter
。這種命名模式使得查找啓動器變得很容易,尤爲是在使用支持按名稱搜索依賴關係的IDE時。可是這個不是絕對的,有些開發者可能不聽從這種契約。
目前大概有超過50
種官方starter
。最經常使用的是:服務器
spring-boot-starter
: 核心啓動器,包括自動配置支持,日誌記錄和YAMLspring-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
: 使用Spring MVC
構建Web的啓動器,包括RESTful
應用程序其餘starter 可去spring.io查詢mybatis
若是咱們要禁用特定的自動配置,咱們可使用@EnableAutoConfiguration
註解的exclude
屬性來指示它。以下禁用了數據源自動配置DataSourceAutoConfiguration
:app
若是咱們使用@SpringBootApplication
註解。 它具備@EnableAutoConfiguration
做爲元註解 - 咱們一樣能夠配置exclude屬性來禁用自動配置:maven
咱們還可使用spring.autoconfigure.exclude
環境屬性禁用自動配置。在application.properties
(也能夠是application.yml
)配置文件設置以下也能夠達到一樣的目的:
要註冊自動配置類,咱們必須在META-INF / spring.factories
文件的EnableAutoConfiguration
鍵(key)下列出其徹底限定名稱,若是是多個按照如下風格配置:
若是咱們使用Maven構建一個項目,那麼該文件應放在resources / META-INF
目錄中。
使用@Conditional
系列註解。 例如@ConditionalOnMissingBean
。此註釋的最顯着屬性是:
value
:要檢查的bean類型name
:要檢查的bean的名稱@Bean
裝飾的方法上時,目標類型默認爲方法的返回類型:表示的意思是若是不存在CustomService
類型的bean則初始化並注入該bean。
傳統上,咱們將Web應用程序打包爲WAR文件,而後將其部署到外部服務器中。這樣作可讓咱們在同一臺服務器上安排多個應用程序。在CPU和內存稀缺的時候,這是節省資源的好方法。
但事情發生了變化。如今計算機硬件至關便宜,而且注意力轉向服務器配置。在部署期間配置服務器的一個小錯誤可能會致使災難性後果。
Spring經過提供一個插件即spring-boot-maven-plugin
來解決這個問題,將Web應用程序打包爲可執行的JAR
。要包含此插件,只需向pom.xml
添加一個插件元素:
有了這個插件,咱們將在執行包階段後獲得一個fat JAR
。此JAR包含全部必需的依賴項,包括嵌入式服務器。所以,咱們再也不須要擔憂配置外部服務器。
而後咱們能夠像運行普通的可執行JAR
同樣運行應用程序。
請注意,必須將pom.xml
文件中的packaging
元素設置爲 jar
才能構建JAR
文件:
若是咱們不包含這個元素,它也默認爲jar
。
若是咱們想要構建WAR
文件,請將包裝 元素更改成war
:
並將容器依賴關係從打包文件中刪除:
執行Maven 包階段後,咱們將擁有一個可部署的WAR
文件。
能夠實現接口 ApplicationRunner
或者者 CommandLineRunner
,這兩個接口實現方式同樣,它們都只提供了一個 run
方法。更加詳細的操做參見我公衆號:Felordcn
中的相關文章。
Spring Boot支持外部配置,容許咱們在各類環境中運行相同的應用程序。咱們可使用properties
文件,YAML文件
,環境變量,系統屬性和命令行選項參數來指定配置屬性。
而後,咱們能夠訪問使用這些屬性@Value註釋,經由綁定對象 的@ConfigurationProperties
註釋或Environment
環境抽象類注入。
如下是最多見的外部配置來源:
-server.port = 8080
。Spring Boot將全部參數轉換爲屬性,並將它們添加到環境屬性集中。application.properties
文件或其YAML
對應文件加載的屬性。默認狀況下,Spring Boot會在當前目錄,類路徑根或其config
子目錄中搜索此文件。application- {profile} .properties
文件或其YAML
對應文件加載。{profile}
佔位符是指活性輪廓。這些文件與非特定屬性文件位於相同位置,而且優先於非特定屬性文件。在爲Spring應用程序運行集成測試時,咱們必須有一個ApplicationContext
。
爲了簡化測試,Spring Boot爲測試提供了一個特殊的註釋 @SpringBootTest
。此批註從其classes
屬性指示的配置類建立ApplicationContext
。
若是未設置classes屬性,Spring Boot將搜索主配置類。搜索從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration註釋的類。
請注意,若是咱們使用JUnit 4
,咱們必須用@RunWith(SpringRunner.class)
裝飾測試類。能夠查閱 文章Spring Boot 2 實戰:mock測試你的web應用。
Spring Boot Actuator
能夠幫助你監控和管理Spring Boot應用,好比健康檢查、審計、統計和HTTP追蹤等。全部的這些特性能夠經過JMX
或者HTTP endpoints
來得到。
Actuator同時還能夠與外部應用監控系統整合,好比 Prometheus
, Graphite
, DataDog
, Influx
, Wavefront
, New Relic
等。這些系統提供了很是好的儀表盤、圖標、分析和告警等功能,使得你能夠經過統一的接口輕鬆的監控和管理你的應用。Actuator
使用Micrometer
來整合上面提到的外部應用監控系統。這使得只要經過很是小的配置就能夠集成任何應用監控系統。
將Spring Boot Actuator集成到一個項目中很是簡單。咱們須要作的就是在pom.xml
文件中包含 spring-boot-starter-actuator
啓動器:
Spring Boot Actuator
可使用HTTP
或JMX
端點公開操做信息。可是,大多數應用程序都使用HTTP
,其中端點的標識和/執行器前綴造成URL
路徑。
如下是Actuator提供的一些最多見的內置端點:
auditevents
: 公開審計事件信息env
: 公開環境屬性health
: 顯示應用程序運行情況信息httptrace
: 顯示HTTP跟蹤信息info
: 顯示任意應用程序信息metrics
: 顯示指標信息mappings
: 顯示全部@RequestMapping路徑的列表scheduledtasks
: 顯示應用程序中的計劃任務threaddump
: 執行線程轉儲更多關於Spring Boot Actuator
的信息可查看Spring Boot 2.x 中的 Actuator 。
請注意:生產使用Actuator務必保護好這些端點,避免未受權的訪問請求。
今天小胖哥介紹了在技術面試中常常遇到的一些關於Spring Boot的最關鍵問題。掌握以上的知識在平常開發中也是必要的,但願對你的面試有所幫助。