SpringBoot面試題*92(含詳解)

文章目錄

1、什麼是 Spring Boot?

多年 來, 隨着 新功 能的 增加 ,spring 變得 越來 越復 雜。 只需 訪問https://spring.io/projects 頁面 ,我們 就會 看到 可以 在我 們的 應用 程序 中使 用的所有 Spring 項目 的不 同功 能。 如果 必須 啓動 一個 新的 Spring 項目 ,我 們必 須添加構 建路 徑或 添加 Maven 依賴關係 ,配 置應 用程 序服 務器 ,添 加 spring 配置 。因此 ,開始 一個 新的 spring 項目 需要 很多 努力 ,因爲 我們 現在 必須 從頭 開始做所有事 情。

Spring Boot 是解 決這 個問 題的 方法 。Spring Boot 已經 建立 在現 有 spring 框架之上 。使用 spring 啓動 ,我們 避免 了之 前我 們必 須做 的所 有樣 板代 碼和 配置 。因此, Spring Boot 可以 幫助 我們 以最 少的 工作 量, 更加 健壯 地使 用現 有的 Spring功能

2、爲什麼要用SpringBoot

Spring Boot 優點非常多,如:
一、獨立運行
Spring Boot而且內嵌了各種servlet容器,Tomcat、Jetty等,現在不再需要打成war包部署到容器中,Spring Boot只要打成一個可執行的
jar包就能獨立運行,所有的依賴包都在一個jar包內。
二、簡化配置
spring-boot-starter-web啓動器自動依賴其他組件,簡少了maven的配置。
三、自動配置
Spring Boot能根據當前類路徑下的類、jar包來自動配置bean,如添加一個spring-boot-starter-web啓動器就能擁有web的功能,無需其他配置。
四、無代碼生成和XML配置
Spring Boot配置過程中無代碼生成,也無需XML配置文件就能完成所有配置工作,這一切都是藉助於條件註解完成的,這也是Spring4.x的核心功能之一。
五、應用監控
Spring Boot提供一系列端點可以監控服務及應用,做健康檢測

3、Spring Boot 有哪些優點?

Spring Boot 的優點有:

  1. 減少開發,測試時間和努力。
  2. 使用 JavaConfig 有助於避免使用 XML。
  3. 避免大量的 Maven 導入和各種版本衝突。
  4. 提供意見發展方法。
  5. 通過提供默認值快速開始開發。
  6. 沒有單獨的 Web 服務器需要。這意味着你不再需要啓動 Tomcat,Glassfish或其他任何東西。
  7. 需要更少的配置 因爲沒有 web.xml 文件。只需添加用@ Configuration 註釋的類,然後添加用@Bean 註釋的方法,Spring 將自動加載對象並像以前一樣對其進行管理。您甚至可以將@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關係中。
  8. 基於環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序:-Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件後,Spring 將在(application{environment} .properties)中加載後續的應用程序屬性文件。

4、Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?

啓動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了以下
3 個註解:
@SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。
@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能:
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描

5、運行Spring Boot有哪幾種方式

  1. 打包用命令或者放到容器中運行
  2. 用 Maven/Gradle 插件運行
  3. 直接執行 main 方法運行

6、如何理解 Spring Boot 中的 Starters?

Starters 是 什 麼 : Starters可以理解爲啓動器,它包含了一系列可以集成到應用裏面的依賴包,你可以一站式集成Spring及其他技術,而不需要到處找示例代碼和依賴包。如你想使用Spring JPA訪問數據庫,只要加入springboot-starter-data-jpa啓動器依賴就能使用了。Starters包含了許多項目中需要用到的依賴,它們能快速持續的運行,都是一系列得到支持的管理傳遞性依賴。
Starters命名:
Spring Boot官方的啓動器都是以spring-boot-starter-命名的,代表了一個特定的應用類型。第三方的啓動器不能以spring-boot開頭命名,它們都被Spring Boot官方保留。一般一個第三方的應該這樣命名,像mybatis的mybatis-spring-boot-starter。
Starters分類:

  1. Spring Boot應用類啓動器
    在這裏插入圖片描述
  2. Spring Boot生產啓動器
    在這裏插入圖片描述
  3. 其他第三方啓動器

7、如何在Spring Boot啓動的時候運行一些特定的代碼?

如果你想在Spring Boot啓動的時候運行一些特定的代碼,你可以實現接口ApplicationRunner或者CommandLineRunner,這兩個接口實現方式一樣,它們都只提供了一個run方法。CommandLineRunner:啓動獲取命令行參數

8、Spring Boot 需要獨立的容器運行嗎?

可以不需要,內置了 Tomcat/ Jetty 等容器

9、Spring Boot中的監視器是什麼?

Spring boot actuator是spring啓動框架中的重要功能之一。Spring boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作爲HTTP URL訪問的REST端點來檢查狀態

10、如何使用Spring Boot實現異常處理?

Spring提供了一種使用ControllerAdvice處理異常的非常有用的方法。 我們通過實現一個ControlerAdvice類,來處理控制器類拋出的所有異常

11、你如何理解 Spring Boot 中的 Starters

Starters可以理解爲啓動器,它包含了一系列可以集成到應用裏面的依賴包,你可以一站式集成 Spring及其他技術,而不需要到處找示例代碼和依賴包。如你想使用 Spring JPA 訪問數據庫,只要加入spring-boot-starter-data-jpa 啓動器依賴就能使用了

12、springboot常用的starter有哪些

spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支持
spring-boot-starter-data-jpa 數據庫支持
spring-boot-starter-data-redis redis數據庫支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter

13、SpringBoot 實現熱部署有哪幾種方式

主要有兩種方式: Spring Loaded Spring-boot-devtools

14、如何理解 Spring Boot 配置加載順序

在 Spring Boot 裏面,可以使用以下幾種方式來加載配置。

  1. properties文件;
  2. YAML文件;
  3. 系統環境變量;
  4. 命令行參數; 等等……

15、Spring Boot 的核心配置文件有哪幾個?它們的區別是什麼?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件這個容易理解,主要用於 Spring Boot 項目的自動化配置。
bootstrap 配置文件有以下幾個應用場景。

  1. 使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息;
  2. 一些固定的不能被覆蓋的屬性;
  3. 一些加密/解密的場景

16、如何集成 Spring Boot 和 ActiveMQ
對於集成 Spring Boot 和 ActiveMQ,我們使用spring-boot-starter-activemq依賴關係。 它只需要很少的配置,並且不需要樣板代碼

17、什麼是 JavaConfig?

Spring JavaConfig 是 Spring 社區的產品,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助於避免使用 XML 配置。使用
JavaConfig 的優點在於:

  1. 面向對象的配置。由於配置被定義爲 JavaConfig 中的類,因此用戶可以充分利用 Java 中的面向對象功能。一個配置類可以繼承另一個,重寫它的@Bean 方法等。
  2. 減少或消除 XML 配置。基於依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。
    JavaConfig 爲開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,只使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認爲將JavaConfig 與 XML 混合匹配是理想的。
  3. 類型安全和重構友好。JavaConfig 提供了一種類型安全的方法來配置 Spring容器。由於 Java 5.0 對泛型的支持,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基於字符串的查找。

18、如何重新加載 Spring Boot 上的更改,而無需重新啓動服務器?

這可以使用 DEV 工具來實現。通過這種依賴關係,您可以節省任何更改,嵌入式tomcat 將重新啓動。Spring Boot 有一個開發工具
(DevTools)模塊,它有助於提高開發人員的生產力。Java 開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啓服務器。開發人員可以重新加載 Spring Boot 上的更改,而無需重新啓動服務器。這將消除每次手動部署更改的需要。Spring Boot 在發佈它的第一個版本時沒有這個功能。這是開發人員最需要的功能。DevTools 模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。它還提供 H2 數據庫控制檯以更好地測試應用程序。

<dependency>
	<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>

19、Spring Boot 中的監視器是什麼?

Spring boot actuator 是 spring 啓動框架中的重要功能之一。Spring boot 監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作爲 HTTP URL 訪問的REST 端點來檢查狀態。

20、如何在 Spring Boot 中禁用 Actuator 端點安全性?

默認情況下,所有敏感的 HTTP 端點都是安全的,只有具有 ACTUATOR 角色的用戶才能訪問它們。安全性是使用標準的
HttpServletRequest.isUserInRole 方法實施的。 我們可以使用來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。

21、如何在自定義端口上運行 Spring Boot 應用程序?

爲了在自定義端口上運行 Spring Boot 應用程序,您可以在application.properties 中指定端口。

server.port = 8090

22、什麼是 YAML?

YAML 是一種人類可讀的數據序列化語言。它通常用於配置文件。
與屬性文件相比,如果我們想要在配置文件中添加複雜的屬性,YAML 文件就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置數據。

23、如何實現 Spring Boot 應用程序的安全性?

爲了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展WebSecurityConfigurerAdapter 並覆蓋其方法。

24、如何集成 Spring Boot 和 ActiveMQ?

對於集成 Spring Boot 和 ActiveMQ,我們使用
依賴關係。 它只需要很少的配置,並且不需要樣板代碼。

25、如何使用 Spring Boot 實現分頁和排序?

使用 Spring Boot 實現分頁非常簡單。使用 Spring Data-JPA 可以實現將可分頁的傳遞給存儲庫方法。

26、什麼是 Swagger?你用 Spring Boot 實現了它嗎?

Swagger 廣泛用於可視化 API,使用 Swagger UI 爲前端開發人員提供在線沙箱。Swagger 是用於生成 RESTful Web 服務的可視化表示的工具,規範和完整框架實現。它使文檔能夠以與服務器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger
消除了調用服務時的猜測。

27、什麼是 Spring Profiles?

Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來註冊 bean。因此,當應用程序在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

28、什麼是 Spring Batch?

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟蹤,事務管理,作業處理統計信息,作業重新啓動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單以及複雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

29、什麼是 FreeMarker 模板?

FreeMarker 是一個基於 Java 的模板引擎,最初專注於使用 MVC 軟件架構進行動態網頁生成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程序員可以處理應用程序代碼,而設計人員可以處理 html 頁面設計。最後使用freemarker 可以將這些結合起來,給出最終的輸出頁面。

30、如何使用 Spring Boot 實現異常處理?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

31、您使用了哪些 starter maven 依賴項?

使用了下面的一些依賴項

spring-boot-starter-activemq
spring-boot-starter-security

這有助於增加更少的依賴關係,並減少版本的衝突。

32、什麼是 CSRF 攻擊?

CSRF 代表跨站請求僞造。這是一種攻擊,迫使最終用戶在當前通過身份驗證的Web 應用程序上執行不需要的操作。CSRF 攻擊專門針對狀態改變請求,而不是數據竊取,因爲攻擊者無法查看對僞造請求的響應。

這有助於增加更少的依賴關係,並減少版本的衝突。

33、什麼是 WebSockets?

WebSocket 是一種計算機通信協議,通過單個 TCP 連接提供全雙工通信信道。
在這裏插入圖片描述

  1. WebSocket 是雙向的 -使用 WebSocket 客戶端或服務器可以發起消息發送。
  2. WebSocket 是全雙工的 -客戶端和服務器通信是相互獨立的。
  3. 單個 TCP 連接 -初始連接使用 HTTP,然後將此連接升級到基於套接字的連接。然後這個單一連接用於所有未來的通信
  4. Light -與 http 相比,WebSocket 消息數據交換要輕得多。

34、什麼是 AOP?

在軟件開發過程中,跨越應用程序多個點的功能稱爲交叉問題。這些交叉問題與應用程序的主要業務邏輯不同。因此,將這些橫切關注與業務邏輯分開是面向方面編程(AOP)的地方。

35、什麼是 Apache Kafka?

Apache Kafka 是一個分佈式發佈 - 訂閱消息系統。它是一個可擴展的,容錯的發佈 - 訂閱消息系統,它使我們能夠構建分佈式應用程序。這是一個 Apache 頂級項目。Kafka 適合離線和在線消息消費。

36、我們如何監視所有 Spring Boot 微服務?

Spring Boot 提供監視器端點以監控各個微服務的度量。這些端點對於獲取有關應用程序的信息(如它們是否已啓動)以及它們的組件(如數據庫等)是否正常運行很有幫助。但是,使用監視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以瞭解其狀態或健康狀況。想象一下涉及 50 個應用程序的微服務,管理員將不得不擊中所有 50 個應用程序的執行終端。爲了幫助我們處理這種情況,我們將使用位於的開源項目。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI,使我們能夠可視化多個應用程序的度量。

37、Spring Boot 的配置文件有哪幾種格式?它們有什麼區別?

.properties 和 .yml,它們的區別主要是書寫格式不同。

  1. properties
app.user.name = javastack
  1. yml
app:
	user:
		name: javastack

38、開啓 Spring Boot 特性有哪幾種方式?

  1. 繼 承 spring-boot-starter-parent 項 目
  2. 導入spring-boot-dependencies項目依賴

39、Spring Boot 的目錄結構是怎樣的?


cn
+- javastack
+- MyApplication.java
|
+- customer
|	+- Customer.java
|	+- CustomerController.java
|	+- CustomerService.java
|	+- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java

這個目錄結構是主流及推薦的做法,而在主入口類上加上 @SpringBootApplication 註解來開啓 Spring Boot 的各項能力,如自動配置、組件掃描等。

40、運行 Spring Boot 有哪幾種方式?

  1. 打包用命令或者放到容器中運行
  2. 用 Maven/ Gradle 插件運行3)直接執行 main 方法運行

41、Spring Boot 自動配置原理是什麼?

註解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,首先它得是一個配置文件,其次根據類路徑下是否有這個類去自動配置。

42、如何在 Spring Boot 啓動的時候運行一些特定的代碼?

可以實現接口 ApplicationRunner 或者 CommandLineRunner,這兩個接口實現方式一樣,它們都只提供了一個 run 方法

43、Spring Boot 有哪幾種讀取配置的方式?

Spring Boot 可以通過 @PropertySource,@Value,@Environment, @ConfigurationProperties 來綁定變量

44、Spring Boot 支持哪些日誌框架?推薦和默認的日誌框架是哪個?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作爲日誌框架,如果你使用 Starters 啓動器,Spring Boot 將使用 Logback 作爲默認日誌框架

45、Spring Boot 如何定義多套不同環境配置?

提供多套配置文件,如:


applcation.properties

application-dev.properties

application-test.properties

application-prod.properties

運行時指定具體的配置文件

46、Spring Boot 可以兼容老 Spring 項目嗎,如何做?

可以兼容,使用 @ImportResource 註解導入老 Spring 項目配置文件。

47、保護 Spring Boot 應用有哪些方法?

  • 在生產中使用HTTPS
  • 使用Snyk檢查你的依賴關係升級到最新版本
  • 啓用CSRF保護
  • 使用內容安全策略防止XSS攻擊

48、Spring Boot 2.X 有什麼新特性?與 1.X 有什麼區別?

  • 配置變更
  • JDK 版本升級第三方類庫升級
  • 響應式 Spring 編程支持
  • HTTP/2 支持配置屬性綁定
  • 更多改進與加強…

49、如何重新加載Spring Boot上的更改,而無需重新啓動服務器?

這可以使用DEV工具來實現。通過這種依賴關係,您可以節省任何更改,嵌入式tomcat將重新啓動。
Spring Boot有一個開發工具(DevTools)模塊,它有助於提高開發人員的生產力。Java開發人員面臨的一個主要挑戰是將文件更改自動部署到服務器並自動重啓服務器。
開發人員可以重新加載Spring Boot上的更改,而無需重新啓動服務器。這將消除每次手動部署更改的需要。Spring Boot在發佈它的第一個版本時沒有這個功能。
這是開發人員最需要的功能。DevTools模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。它還提供H2數據庫控制檯以更好地測試應用程序。
org.springframework.boot spring-boot-devtools
true

50、springboot集成mybatis的過程

添加mybatis的starter maven依賴org.mybatis.spring.boot
mybatis-spring-boot-starter 1.2.0
在mybatis的接口中 添加@Mapper註解在application.yml配置數據源信息

51、Spring Boot、Spring MVC 和 Spring 有什麼區別?

SpringFrame
SpringFramework 最重要的特徵是依賴注入。所有 SpringModules 不是依賴注入就是 IOC 控制反轉。
當我們恰當的使用 DI 或者是 IOC 的時候,我們可以開發鬆耦合應用。鬆耦合應用的單元測試可以很容易的進行。
SpringMVC
Spring MVC 提供了一種分離式的方法來開發 Web 應用。通過運用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些簡單的概念,開發 Web 應用將會變的非常簡單。
SpringBoot
Spring 和 SpringMVC 的問題在於需要配置大量的參數。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix">
		<value>/WEB-INF/views/</value>
	</property>
		<property name="suffix">
	<value>.jsp</value>
	</property>
</bean>
<mvc:resources mapping="/webjars/**" location="/webjars/"/>

52、什麼是 Spring Boot Stater ?

啓動器是一套方便的依賴沒描述符,它可以放在自己的程序中。你可以一站式的獲取你所需要的 Spring 和相關技術,而不需要依賴描述符的通過示例代碼搜索和複製黏貼的負載。

例如,如果你想使用 Sping 和 JPA 訪問數據庫,只需要你的項目包含 spring-boot-starter-data-jpa 依賴項,你就可以完美進行。問題四 你能否舉一個例子來解釋更多 Staters 的內容?
讓我們來思考一個 Stater 的例子 -Spring Boot Stater Web。
如果你想開發一個 web 應用程序或者是公開 REST 服務的應用程序。Spring Boot Start Web 是首選。讓我們使用 Spring Initializr 創建一個 Spring Boot Start Web 的快速項目。
Spring Boot Start Web 的依賴項

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

下面的截圖是添加進我們應用程序的不同的依賴項
在這裏插入圖片描述
依賴項可以被分爲

Spring - core,beans,context,aop Web MVC - (Spring MVC)
Jackson - for JSON Binding
Validation - Hibernate,Validation API
Enbedded Servlet Container - Tomcat
Logging - logback,slf4j

任何經典的 Web 應用程序都會使用所有這些依賴項。Spring Boot Starter Web 預先打包了這些依賴項。

作爲一個開發者,我不需要再擔心這些依賴項和它們的兼容版本。

53、Spring Boot 還提供了其它的哪些 Starter Project Options?

Spring Boot 也提供了其它的啓動器項目包括,包括用於開發特定類型應用程序的典型依賴項。
spring-boot-starter-web-services - SOAP Web Services
spring-boot-starter-web - Web 和 RESTful 應用程序
spring-boot-starter-test - 單元測試和集成測試
spring-boot-starter-jdbc - 傳統的 JDBC
spring-boot-starter-hateoas - 爲服務添加 HATEOAS 功能
spring-boot-starter-security - 使用 SpringSecurity 進行身份驗證和授權
spring-boot-starter-data-jpa - 帶有 Hibeernate 的 Spring Data JPA
spring-boot-starter-data-rest - 使用 Spring Data REST 公佈簡單的 REST 服務

54、Spring 是如何快速創建產品就緒應用程序的?

Spring Boot 致力於快速產品就緒應用程序。爲此,它提供了一些譬如高速緩存,日誌記錄,監控和嵌入式服務器等開箱即用的非功能性特徵。
spring-boot-starter-actuator - 使用一些如監控和跟蹤應用的高級功能
spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 選擇您的特定嵌入式 Servlet 容器
spring-boot-starter-logging - 使用 logback 進行日誌記錄
spring-boot-starter-cache - 啓用 Spring Framework 的緩存支持
###Spring2 和 Spring5 所需要的最低 Java 版本是什麼?
Spring Boot 2.0 需要 Java8 或者更新的版本。Java6 和 Java7 已經不再支持。推薦閱讀:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes

55、創建一個 Spring Boot Project 的最簡單的方法是什麼?

Spring Initializr是啓動 Spring Boot Projects 的一個很好的工具。
在這裏插入圖片描述

  • 就像上圖中所展示的一樣,我們需要做一下幾步: 登錄 Spring Initializr,按照以下方式進行選擇:
  • 選擇 com.in28minutes.springboot 爲組
  • 選擇 studet-services 爲組件
  • 選擇下面的依賴項
  • Web Actuator DevTools
  • 點擊生 GenerateProject
  • 將項目導入 Eclipse。文件 - 導入 - 現有的 Maven 項目

56、Spring Initializr 是創建 Spring Boot Projects 的唯一方法嗎?

不是的。
Spring Initiatlizr 讓創建 Spring Boot 項目變的很容易,但是,你也可以通過設置一個 maven 項目並添加正確的依賴項來開始一個項目。在我們的 Spring 課程中,我們使用兩種方法來創建項目。
第一種方法是 start.spring.io 。
另外一種方法是在項目的標題爲“Basic Web Application”處進行手動設置。
手動設置一個 maven 項目這裏有幾個重要的步驟:
在 Eclipse 中,使用文件 - 新建 Maven 項目來創建一個新項目添加依賴項。
添加 maven 插件。
添加 Spring Boot 應用程序類。
到這裏,準備工作已經做好!

57、如何使用 SpringBoot 自動重裝我的應用程序?

使用 Spring Boot 開發工具。
把 Spring Boot 開發工具添加進入你的項目是簡單的。
把下面的依賴項添加至你的 Spring Boot Project pom.xml 中

<dependency>
	<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
	<scope>runtime</scope>
</dependency>

重啓應用程序,然後就可以了。
同 樣 的 , 如 果 你 想 自 動 裝 載 頁 面 , 有 可 以 看 看 FiveReload
http://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-live-reload
在我測試的時候,發現了 LiveReload 漏洞,如果你測試時也發現了,請一定要告訴我們。

58、 什麼是嵌入式服務器?我們爲什麼要使用嵌入式服務器呢?

思考一下在你的虛擬機上部署應用程序需要些什麼。第一步: 安裝 Java
第二部: 安裝 Web 或者是應用程序的服務器(Tomat/Wbesphere/Weblogic 等等) 第三部: 部署應用程序 war 包
如果我們想簡化這些步驟,應該如何做呢?
讓我們來思考如何使服務器成爲應用程序的一部分?

你只需要一個安裝了 Java 的虛擬機,就可以直接在上面部署應用程序了, 是不是很爽?

這個想法是嵌入式服務器的起源。
當我們創建一個可以部署的應用程序的時候,我們將會把服務器(例如,tomcat)嵌入到可部署的服務器中。

例如,對於一個 Spring Boot 應用程序來說,你可以生成一個包含 Embedded Tomcat 的應用程序 jar。你就可以想運行正常 Java 應用程序一樣來運行 web 應用程序了。

嵌入式服務器就是我們的可執行單元包含服務器的二進制文件(例如,tomcat.jar)。

59、如何在 Spring Boot 中添加通用的 JS 代碼?

在源文件夾下,創建一個名爲 static 的文件夾。然後,你可以把你的靜態的內容放在這裏面。例如,myapp.js 的路徑是 resources\static\js\myapp.js
你可以參考它在 jsp 中的使用方法

<csript src="/js/myapp.js"></script>

錯誤:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.
該如何來修復這個錯誤呢?

{
	"timestamp": 1488656019562,
	"status": 401,
	"error": "Unauthorized",
	"message": "Full authentication is required to access this resource.", "path": "/beans"
}

兩種方法:
方法 1:關閉安全驗證
application.properties

management.security.enabled:FALSE

方法二:在日誌中搜索密碼並傳遞至請求標頭中

61、什麼是 Spring Data REST?

Spring Data TEST 可以用來發布關於 Spring 數據庫的 HATEOAS RESTful 資源。下面是一個使用 JPA 的例子

@RepositoryRestResource(collectionResourceRel = "todos", path = "todos") 
public interface TodoRepository
extends PagingAndSortingRepository<Todo, Long> {
}

不需要寫太多代碼,我們可以發佈關於 Spring 數據庫的 RESTful API。下面展示的是一些關於 TEST 服務器的例子
POST

  • URL:http://localhost:8080/todos
  • Use Header:Content-Type
  • Type:application/json Request Content
    代碼如下

{
	"user": "Jill",
	"desc": "Learn Hibernate",
	 "done": false
}

響應內容


{
	"user": "Jill",
	"desc": "Learn Hibernate", "done": false,
	"_links": {
		"self": {
			"href": "http://localhost:8080/todos/1"
		},
		"todo": {
			"href": "http://localhost:8080/todos/1"
		}
	}
}

響應包含新創建資源的 href。

62、path=”users”, collectionResourceRel=”users” 如何與 Spring Data Rest 一起使用?


@RepositoryRestResource(collectionResourceRel = "users", path = "users")

public interface UserRestRepository extends PagingAndSortingRepository<User, Long>
  • path- 這個資源要導出的路徑段。
  • collectionResourceRel- 生成指向集合資源的鏈接時使用的 rel 值。在生成 HATEOAS 鏈接時使用。

63、當 Spring Boot 應用程序作爲 Java 應用程序運行時,後臺會發生什麼?

如果你使用 Eclipse IDE,Eclipse maven 插件確保依賴項或者類文件的改變一經添加,就會被編譯並在目標文件中準備好!在這之後,就和其它的 Java 應用程序一樣了。
當你啓動 java 應用程序的時候,spring boot 自動配置文件就會魔法般的啓用了。
當 Spring Boot 應用程序檢測到你正在開發一個 web 應用程序的時候,它就會啓動 tomcat。

64、我們能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?

在 spring-boot-starter-web 移除現有的依賴項,並把下面這些添加進去。


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

65、如何使用 Spring Boot 生成一個 WAR 文件?

推薦閱讀:
https://spring.io/guides/gs/convert-jar-to-war/
下面有 spring 說明文檔直接的鏈接地址:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging

66、如何使用 Spring Boot 部署到不同的服務器?

你需要做下面兩個步驟:
在一個項目中生成一個 war 文件。
將它部署到你最喜歡的服務器(websphere 或者 Weblogic 或者 Tomcat and so on)。
第一步:這本入門指南應該有所幫助:
https://spring.io/guides/gs/convert-jar-to-war/
第二步:取決於你的服務器。

67、RequestMapping 和 GetMapping 的不同之處在哪裏?

RequestMapping 具有類屬性的,可以進行 GET,POST,PUT 或者其它的註釋中具有的請求方法。
GetMapping 是 GET 請求方法中的一個特例。它只是 ResquestMapping 的一個延伸,目的是爲了提高清晰度。

68、爲什麼我們不建議在實際的應用程序中使用 Spring Data Rest?

我們認爲 Spring Data Rest 很適合快速原型製造!在大型應用程序中使用需要謹慎。通過 Spring Data REST 你可以把你的數據實體作爲 RESTful 服務直接發佈。
當你設計 RESTful 服務器的時候,最佳實踐表明,你的接口應該考慮到兩件重要的事情:
你的模型範圍。
你的客戶。
通過 With Spring Data REST,你不需要再考慮這兩個方面,只需要作爲 TEST 服務發佈實體。
這就是爲什麼我們建議使用 Spring Data Rest 在快速原型構造上面,或者作爲項目的初始解決方法。對於完整演變項目來說,這並不是一個好的注意。

69、在 Spring Initializer 中,如何改變一個項目的包名字?

好消息是你可以定製它。點擊鏈接“轉到完整版本”。你可以配置你想要修改的包名稱!

70、可以配置 application.propertierde 的完整的屬性列表在哪裏可以找到?

這裏是完整的指南:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

71、JPA 和 Hibernate 有哪些區別?

簡而言之
JPA 是一個規範或者接口
Hibernate 是 JPA 的一個實現
當我們使用 JPA 的時候,我們使用 javax.persistence 包中的註釋和接口時,不需要使用 hibernate 的導入包。
我們建議使用 JPA 註釋,因爲哦我們沒有將其綁定到 Hibernate 作爲實現。後來(我知道 - 小於百分之一的機率),我們可以使用另一種
JPA 實現。

72、使用 Spring Boot 啓動連接到內存數據庫 H2 的 JPA 應用程序需要哪些依賴項?

在 Spring Boot 項目中,當你確保下面的依賴項都在類路里面的時候,你可以加載 H2 控制檯。
web 啓動器
h2
jpa 數據啓動器其它的依賴項在下面:


<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

需要注意的一些地方:

  • 一個內部數據內存只在應用程序執行期間存在。這是學習框架的有效方式。
  • 這不是你希望的真是世界應用程序的方式。
  • 在問題“如何連接一個外部數據庫?”中,我們解釋瞭如何連接一個你所選擇的數據庫。

73、如何不通過任何配置來選擇 Hibernate 作爲 JPA 的默認實現?

因爲 Spring Boot 是自動配置的。下面是我們添加的依賴項

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

spring-boot-stater-data-jpa 對於 Hibernate 和 JPA 有過渡依賴性。
當 Spring Boot 在類路徑中檢測到 Hibernate 中,將會自動配置它爲默認的 JPA 實現。

74、指定的數據庫連接信息在哪裏?它是如何知道自動連接至 H2 的?

這就是 Spring Boot 自動配置的魔力。來自:
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html
Spring Boot auto-configuration 試圖自動配置你已經添加的基於 jar 依賴項的 Spring 應用程序。比如說,如果 HSQLDBis 存在你的類路徑中,並且,數據庫連接 bean 還沒有手動配置,那麼我們可以自動配置一個內存數據庫。
進一步的閱讀:
http://www.springboottutorial.com/spring-boot-auto-configuration

75、我們如何連接一個像 MSSQL 或者 orcale 一樣的外部數據庫?

讓我們以 MySQL 爲例來思考這個問題:
第一步 - 把 mysql 連接器的依賴項添加至 pom.xml

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

第二步 - 從 pom.xml 中移除 H2 的依賴項
或者至少把它作爲測試的範圍。

<!--
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
-->

第三步 - 安裝你的 MySQL 數據庫
更多的來看看這裏 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-up-mysql
第四步 - 配置你的 MySQL 數據庫連接
配置 application.properties

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/todo_example
spring.datasource.username=todouser 
spring.datasource.password=YOUR_PASSWORD

第五步 - 重新啓動,你就準備好了!
就是這麼簡單!

76、Spring Boot 配置的默認 H2 數據庫的名字是上面?爲什麼默認的數據庫名字是

testdb?
在 application.properties 裏面,列出了所有的默認值
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
找到下面的屬性

spring.datasource.name=testdb # Name of the datasource.

如果你使用了 H2 內部存儲數據庫,它裏面確定了 Spring Boot 用來安裝你的 H2 數據庫的名字。

77、如果 H2 不在類路徑裏面,會出現上面情況?

將會報下面的錯誤

Cannot determine embedded database driver class for database type NONE

把 H2 添加至 pom.xml 中,然後重啓你的服務器

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

78、你能否舉一個以 ReadOnly 爲事務管理的例子?

當你從數據庫讀取內容的時候,你想把事物中的用戶描述或者是其它描述設置爲只讀模式,以便於 Hebernate 不需要再次檢查實體的變化。這是非常高效的。

79、發佈 Spring Boot 用戶應用程序自定義配置的最好方法是什麼?

@Value 的問題在於,您可以通過應用程序分配你配置值。更好的操作是採取集中的方法。你可以使用 @ConfigurationProperties 定義一個配置組件。

@Component
@ConfigurationProperties("basic")
public class BasicConfiguration {
	private boolean value; 
	private String message;
	private int number;
	...

你可以在 application.properties 中配置參數。

basic.value: true 
basic.message: Dynamic Message 
basic.number: 100

80、配置文件的需求是什麼?

企業應用程序的開發是複雜的,你需要混合的環境:

  • Dev
  • QA
  • Stage
  • Production
    在每個環境中,你想要不同的應用程序配置。

配置文件有助於在不同的環境中進行不同的應用程序配置。

Spring 和 Spring Boot 提供了你可以制定的功能。

  • 不同配置文件中,不同環境的配置是什麼?
  • 爲一個制定的環境設置活動的配置文件。
    Spring Boot 將會根據特定環境中設置的活動配置文件來選擇應用程序的配置。

81、如何使用配置文件通過 Spring Boot 配置特定環境的配置?

配置文件不是設別環境的關鍵。
在下面的例子中,我們將會用到兩個配置文件

  • dev
  • prod
    缺省的應用程序配置在 application.properties 中。讓我們來看下面的例子:
    application.properties
basic.value= true 
basic.message= Dynamic Message 
basic.number= 100

我們想要爲 dev 文件自定義 application.properties 屬性。我們需要創建一個名爲 application-dev.properties 的文件,並且重寫我們想要自定義的屬性。
application-dev.properties

basic.message: Dynamic Message in DEV

一旦你特定配置了配置文件,你需要在環境中設定一個活動的配置文件。有多種方法可以做到這一點:

  • 在 VM 參數中使用 Dspring.profiles.active=prod
  • 在 application.properties 中使用 spring.profiles.active=prod

文章來源: http://www.3xmq.com/article/1522809264295

82、我們如何使用Maven設置Spring Boot應用程序?

我們可以像在任何其他庫中一樣在Maven項目中包含Spring Boot。但是,最好的方法是從 spring-boot-starter-parent 項目繼承並聲明依賴於Spring Boot啓動器。這樣做可以讓我們的項目重用Spring Boot的默認設置。 繼承 spring-boot-starter-parent 項目非常簡單 - 我們只需要在pom.xml中指定一個parent元素:
在這裏插入圖片描述
我們可以在Maven 中央倉庫找到最新版本的 spring-boot-starter-parent 。 上面的方式很方便但是並不一定符合實際需要。例如公司要求所有項目依賴構建從一個標準BOM開始,我們就不能按上面的方式進行。 在這種情況下,我們可以進行如下引用:
在這裏插入圖片描述

83、如何禁用特定的自動配置?

如果我們要禁用特定的自動配置,我們可以使用 @EnableAutoConfiguration 註解的 exclude 屬性來指示它。如下禁用了數據源自動配置
在這裏插入圖片描述
如果我們使用 @SpringBootApplication 註解。 它具有 @EnableAutoConfiguration 作爲元註解 - 我們同樣可以配置exclude屬性來禁用自動配置:
在這裏插入圖片描述
我們還可以使用 spring.autoconfigure.exclude 環境屬性禁用自動配置。在 application.properties (也可以是 application.yml )配置文件設置如下也可以達到同樣的目的:
在這裏插入圖片描述

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

Spring Boot支持外部配置,允許我們在各種環境中運行相同的應用程序。我們可以使用 properties 文件, YAML文件 ,環境變量,系統屬性和命令行選項參數來指定配置屬性。 然後,我們可以訪問使用這些屬性@Value註釋,經由綁定對象 的 @ConfigurationProperties 註釋或 Environment 環境抽象類注入。 以下是最常見的外部配置來源:

  • 命令行屬性:命令行選項參數是以雙連字符開頭的程序參數,例如 -server.port = 8080 。Spring Boot將所有參數轉換爲屬性,並將它們添加到環境屬性集中。
  • 應用程序屬性:應用程序屬性是從 application.properties 文件或其 YAML 對應文件加載的屬性。默認情況下,Spring Boot會在當前目錄,類路徑根或其 config 子目錄中搜索此文件。 特定於配置文件的屬性:特定於配置文件的屬性從
    application- {profile} .properties 文件或其 YAML 對應文件加載。 {profile} 佔位符是指活性輪廓。這些文件與非特定屬性文件位於相同位置,並且優先於非特定屬性文件。

85、如何對Spring Boot應用進行測試?

在爲Spring應用程序運行集成測試時,我們必須有一個 ApplicationContext 。 爲了簡化測試,Spring Boot爲測試提供了一個特殊的註釋
@SpringBootTest 。此批註從其 classes 屬性指示的配置類創建 ApplicationContext 。 如果未設置classes屬性,Spring Boot將搜索主配置類。搜索從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration註釋的類。 請注意,如果我們使用 JUnit 4 ,我們必須用 @RunWith(SpringRunner.class) 裝飾測試類。

86、Spring Boot Actuator有什麼用?

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 : 執行線程轉儲
  • beans :所有加載的spring bean

更多關於 Spring Boot Actuator 的信息可查看Spring Boot 2.x 中的 Actuator 。 請注意:生產使用Actuator務必保護好這些端點,避免未授權的訪問請求。

87、SpringBoot 中靜態首頁默認位置可以放在哪裏?

當我們應用根目錄時,可以直接映射,將 index.html 放入下面的位置:

classpath:/META-INF/resources/index.html 
classpath:/resources/index.html 
classpath:/static/index.html 
classpath:/public/index.html

89、SpringBoot 中靜態資源直接映射的優先級是怎樣的?

SpringBoot 靜態資源直接映射爲/**,可以通過根目錄來訪問。/META-INF/resources/webjars/映射爲/webjars/,通過訪問 /webjar 訪問。優先級順序爲:META-INF/resources > resources > static > public。

90、繼承 WebMvcConfigurerAdapter 抽象類,常用的重寫方法列舉幾個?

WebMvcConfigurerAdapter 實現 WebMvcConfigurer 接口,常用的可能需要重寫的方法有下面幾個:

/** 解決跨域問題 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 添加攔截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 這裏配置視圖解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置內容裁決的一些選項 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 視圖跳轉控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 靜態資源處理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默認靜態資源處理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

91、@SpringBootApplication 引入了哪3個重要的註解?

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。其它的 4 個 @Target、@Retention、@Documented、
@Inherited,也重要,但應該不是本題想問的知識點。

92、@SpringBootApplication 註解中的屬性相當於哪幾個註解?

等價於以默認屬性使用 @Configuration,@EnableAutoConfiguration 和 @ComponentScan。

擴展連接:加粗樣式更多請點擊這裏

博主公衆號程序員小羊 只發面試相關推文
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章