2019阿里P7最新總結Spring Boot面試問題


 

 

Spring Boot一直是Spring生態系統的關鍵參與者。該項目通過其自動配置功能使我們的生活更加輕松。在本教程中,我們將介紹在求職面試中可能出現的一些與Spring Boot相關的最常見問題。

Spring和Spring Boot有什么區別?

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

多年來,Spring變得越來越復雜,這種應用程序所需的配置量可能會令人生畏。這就是Spring Boot派上用場的地方 - 它使配置Spring應用程序變得輕而易舉。

從本質上講,雖然Spring是不受歡迎的,但Spring Boot對平台和庫有了自己的看法,讓我們快速入門。

以下是Spring Boot帶來的兩個最重要的好處:

  • 根據在類路徑中找到的工件自動配置應用程序
  • 提供生產中應用程序通用的非功能性功能,例如安全性或健康檢查

我們如何使用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的最關鍵問題。我們希望他們能幫助您找到理想的工作。



作者:Java高級架構獅
鏈接:https://www.jianshu.com/p/0b36d8e48c8f
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM