日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

一篇文章带你搞定和Spring Boot有关的那些高频面试题

發(fā)布時間:2025/3/16 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章带你搞定和Spring Boot有关的那些高频面试题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

自Spring Boot誕生以來,就引起了業(yè)界轟動,目前越來越多的公司技術(shù)選型選擇擁抱Spring Boot。所以Spring Boot也成為面試必問的問題之一。下面的問題是小胖哥面試了很多候選人后總結(jié)出來的,希望對你有所幫助

? ? ? ? ? ?Spring和Spring Boot有什么區(qū)別?

Spring Framework提供了多種功能,使Web應(yīng)用程序的開發(fā)更加容易。這些功能包括依賴注入,數(shù)據(jù)綁定,面向方面的編程,數(shù)據(jù)訪問等等。

隨著Spring社區(qū)的壯大,Spring慢慢變得越來越復(fù)雜,不再像開始宣稱的那么輕量級。開發(fā)應(yīng)用程序的配置量越來越大令開發(fā)者頭疼。這時Spring Boot就派上用場了 - 它采用“約定大于配置”的思想簡化了配置,對Spring提供的功能和配置而且將一些功能抽象成為“Starter”開箱即用、按需引用。極大地簡化了開發(fā)。

? ? ? ? ? ? ??我們?nèi)绾问褂肕aven設(shè)置Spring Boot應(yīng)用程序?

我們可以像在任何其他庫中一樣在Maven項目中包含Spring Boot。但是,最好的方法是從spring-boot-starter-parent項目繼承并聲明依賴于Spring Boot啟動器。這樣做可以讓我們的項目重用Spring Boot的默認(rèn)設(shè)置。

繼承spring-boot-starter-parent項目非常簡單 - 我們只需要在pom.xml中指定一個parent元素:

我們可以在Maven 中央倉庫找到最新版本的?spring-boot-starter-parent。

上面的方式很方便但是并不一定符合實(shí)際需要。例如公司要求所有項目依賴構(gòu)建從一個標(biāo)準(zhǔn)BOM開始,我們就不能按上面的方式進(jìn)行。

在這種情況下,我們可以進(jìn)行如下引用:

然后在 dependencies 標(biāo)簽下引用Spring Boot 的starters 就行了。

? ? ? ? ? ? ? ??Spring boot 中的starter是什么?

依賴管理對于項目至關(guān)重要。當(dāng)項目足夠復(fù)雜時,管理依賴項可能會變成一場噩夢,因為涉及的組件太多了。

這就是Spring Boot 的starter就派上用場了。每個starter都可以為我們提供所需要的Spring技術(shù)的一站式服務(wù)。并且以一致的方式傳遞和管理其他所需的依賴關(guān)系。

所有官方starter都在org.springframework.boot組下,其名稱以spring-boot-starter-開頭 。非官方的starter的名稱在前,如mybatis-spring-boot-starter。這種命名模式使得查找啟動器變得很容易,尤其是在使用支持按名稱搜索依賴關(guān)系的IDE時。但是這個不是絕對的,有些開發(fā)者可能不遵從這種契約。

目前大概有超過50種官方starter。最常用的是:

  • spring-boot-starter:?核心啟動器,包括自動配置支持,日志記錄和YAML

  • spring-boot-starter-aop:?使用Spring AOP和AspectJ進(jìn)行面向方面編程的初學(xué)者

  • 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應(yīng)用程序的啟動器

  • spring-boot-starter-web:?使用Spring MVC構(gòu)建Web的啟動器,包括RESTful應(yīng)用程序

其他starter 可去spring.io查詢

? ? ? ? ? ? ? ??Spring Boot 如何禁用特定的自動配置?

如果我們需要禁用特定Spring Boot的自動配置,我們可以使用@EnableAutoConfiguration注解的exclude屬性來指示它。如下禁用了

DataSourceAutoConfiguration:

如果我們使用@SpringBootApplication注解。?它具有@EnableAutoConfiguration作為元注解 - 我們同樣可以配置exclude屬性來禁用自動配置:

我們還可以使用spring.autoconfigure.exclude環(huán)境屬性禁用自動配置。在application.properties配置文件設(shè)置如下也可以達(dá)到同樣的目的:

? ? ? ? ? ? ? ??Spring Boot 如何注冊自定義自動配置?

要注冊自動配置類,我們必須在META-INF /?

spring.factories文件的EnableAutoConfiguration?鍵

下列出其完全限定名稱,如果是多個按照以下風(fēng)格配置:

如果我們使用Maven構(gòu)建一個項目,那么該文件應(yīng)放在resources / META-INF目錄中。

? ? ? ? ? ? ? ??Spring Boot如何根據(jù)不同的條件來加載bean?

?

你可在配置中使用@Conditional 系列注解。例如@ConditionalOnMissingBean。此注釋的最顯著屬性是:

  • value:要檢查的bean類型

  • name:要檢查的bean的名稱

放置在使用@Bean裝飾的方法上時,目標(biāo)類型默認(rèn)為方法的返回類型:

表示的意思是如果不存在CustomService類型的bean則初始化并注入該bean。

? ? ? ? ? ? ? ???如何將Spring Boot Web應(yīng)用程序部署為JAR和 WAR文件?

傳統(tǒng)上,我們將Web應(yīng)用程序打包為WAR文件,然后將其部署到外部服務(wù)器中。這樣做可以讓我們在同一臺服務(wù)器上安排多個應(yīng)用程序。在CPU和內(nèi)存稀缺的時候,這是節(jié)省資源的好方法。

但事情發(fā)生了變化。現(xiàn)在計算機(jī)硬件相當(dāng)便宜,并且注意力轉(zhuǎn)向服務(wù)器配置。在部署期間配置服務(wù)器的一個小錯誤可能會導(dǎo)致災(zāi)難性后果。

Spring通過提供一個插件即spring-boot-maven-plugin來解決這個問題,將Web應(yīng)用程序打包為可執(zhí)行的JAR。要包含此插件,只需向pom.xml添加一個插件元素:

有了這個插件,我們將在執(zhí)行包階段后得到一個fat JAR 。此JAR包含所有必需的依賴項,包括嵌入式服務(wù)器。因此,我們不再需要擔(dān)心配置外部服務(wù)器。

然后我們可以像運(yùn)行普通的可執(zhí)行JAR一樣運(yùn)行應(yīng)用程序。

請注意,必須將pom.xml文件中的packaging元素設(shè)置為?jar?才能構(gòu)建JAR文件:

如果我們不包含這個元素,它也默認(rèn)為jar。

如果我們想要構(gòu)建WAR文件,請將包裝?元素更改為war:

并將容器依賴關(guān)系從打包文件中刪除:

執(zhí)行Maven?包階段后,我們將擁有一個可部署的WAR文件。

? ? ? ? ? ? ? ???如何在Spring Boot啟動的時候運(yùn)行一些邏輯?

可以實(shí)現(xiàn)Spring Boot 提供的接口 ApplicationRunner ?也可以實(shí)現(xiàn)接口CommandLineRunner,這兩個接口實(shí)現(xiàn)方式一樣,它們都只提供了一個 run 方法。

? ? ? ? ? ? ? ? ???Spring boot支持哪些外部配置?

Spring Boot支持外部配置,允許我們在各種環(huán)境中運(yùn)行相同的應(yīng)用程序。我們可以使用properties文件,YAML文件,環(huán)境變量,系統(tǒng)屬性和命令行選項參數(shù)來指定配置屬性。

然后,我們可以訪問使用這些屬性@Value注釋,經(jīng)由綁定對象 的@ConfigurationProperties注釋,或Environment 環(huán)境抽象類注入。

以下是最常見的外部配置來源:

  • 命令行屬性:命令行選項參數(shù)是以雙連字符開頭的程序參數(shù),例如-server.port = 8080。Spring Boot將所有參數(shù)轉(zhuǎn)換為屬性,并將它們添加到環(huán)境屬性集中。

  • 應(yīng)用程序?qū)傩?#xff1a;應(yīng)用程序?qū)傩允菑腶pplication.properties文件或其YAML對應(yīng)文件加載的屬性。默認(rèn)情況下,Spring Boot會在當(dāng)前目錄,類路徑根或其config子目錄中搜索此文件。

  • 特定于配置文件的屬性:特定于配置文件的屬性從application- {profile} .properties文件或其YAML對應(yīng)文件加載。{profile}占位符是指活性輪廓。這些文件與非特定屬性文件位于相同位置,并且優(yōu)先于非特定屬性文件。

? ? ? ? ? ? ? ? ??Spring和Spring Boot有什么區(qū)別?

在為Spring應(yīng)用程序運(yùn)行集成測試時,我們必須有一個ApplicationContext。

為了簡化測試,Spring Boot為測試提供了一個特殊的注釋?@SpringBootTest。此批注從其classes屬性指示的配置類創(chuàng)建ApplicationContext。

如果未設(shè)置classes屬性,Spring Boot將搜索主配置類。搜索從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注釋的類。

請注意,如果我們使用JUnit 4,我們必須用@RunWith(SpringRunner.class)裝飾測試類。可以查閱我前面的關(guān)于Spring Boot Mock測試的文章來學(xué)習(xí)更多的測試方式。

? ? ? ? ? ?Spring Boot Actuator有什么用?

Spring Boot Actuator可以幫助你監(jiān)控和管理Spring Boot應(yīng)用,比如健康檢查、審計、統(tǒng)計和HTTP追蹤等。所有的這些特性可以通過JMX或者HTTP endpoints來獲得。

Actuator同時還可以與外部應(yīng)用監(jiān)控系統(tǒng)整合,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。這些系統(tǒng)提供了非常好的儀表盤、圖標(biāo)、分析和告警等功能,使得你可以通過統(tǒng)一的接口輕松的監(jiān)控和管理你的應(yīng)用。

Actuator使用Micrometer來整合上面提到的外部應(yīng)用監(jiān)控系統(tǒng)。這使得只要通過非常小的配置就可以集成任何應(yīng)用監(jiān)控系統(tǒng)。

將Spring Boot Actuator集成到一個項目中非常簡單。我們需要做的就是在pom.xml文件中包含?spring-boot-starter-actuator啟動器:

Spring Boot Actuator可以使用HTTP或JMX端點(diǎn)公開操作信息。但是,大多數(shù)應(yīng)用程序都使用HTTP,其中端點(diǎn)的標(biāo)識和/執(zhí)行器前綴形成URL路徑。

以下是Actuator提供的一些最常見的內(nèi)置端點(diǎn):

  • auditevents:?公開審計事件信息

  • env:?公開環(huán)境屬性

  • health:?顯示應(yīng)用程序運(yùn)行狀況信息

  • httptrace:?顯示HTTP跟蹤信息

  • info:?顯示任意應(yīng)用程序信息

  • metric:?顯示指標(biāo)信息

  • mapping:?顯示所有@RequestMapping路徑的列表

  • scheduledtasks:?顯示應(yīng)用程序中的計劃任務(wù)

  • threaddump:?執(zhí)行線程轉(zhuǎn)儲

  • beans :所有加載的spring bean

生產(chǎn)使用Actuator務(wù)必保護(hù)好這些端點(diǎn),避免未授權(quán)的訪問請求。

有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

歡迎大家關(guān)注Java之道公眾號

好文章,我在看??

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的一篇文章带你搞定和Spring Boot有关的那些高频面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。