11-Spring Boot面試題(91題)

1跷乐、什么是 Spring Boot屠橄?

多年 來, 隨著 新功 能的 增加 烤芦,spring 變得 越來 越復 雜举娩。 只需 訪問https://spring.io/projects 頁面 ,我們 就會 看到 可以 在我 們的 應用 程序 中使 用的所有 Spring 項目 的不 同功 能。 如果 必須 啟動 一個 新的 Spring 項目 铜涉,我 們必 須添加構 建路 徑或 添加 Maven 依賴 關系 智玻,配 置應 用程 序服 務器 ,添 加 spring 配置 芙代。因此 吊奢,開始 一個 新的 spring 項目 需要 很多 努力 ,因為 我們 現(xiàn)在 必須 從頭 開始 做所有事 情纹烹。
Spring Boot 是解 決這 個問 題的 方法 页滚。Spring Boot 已經(jīng) 建立 在現(xiàn) 有 spring 框架之上 。使用 spring 啟動 铺呵,我們 避免 了之 前我 們必 須做 的所 有樣 板代 碼和 配置 裹驰。因此, Spring Boot 可以 幫 助 我們 以最 少的 工作 量片挂, 更加 健壯 地使 用現(xiàn) 有的 Spring功能

2幻林、為什么要用SpringBoot

Spring Boot 優(yōu)點非常多,如:
一音念、獨立運行
Spring Boot而且內(nèi)嵌了各種servlet容器沪饺,Tomcat、Jetty等症昏,現(xiàn)在不再需要打成war包部署到容器中随闽, Spring Boot只要打成一個可執(zhí)行的jar包就能獨立運行父丰,所有的依賴包都在一個jar包內(nèi)肝谭。
**二、簡化配置 **
spring-boot-starter-web啟動器自動依賴其他組件蛾扇,簡少了maven的配置攘烛。
三、自動配置
Spring Boot能根據(jù)當前類路徑下的類镀首、jar包來自動配置bean坟漱,如添加一個spring-boot-starter-web啟 動器就能擁有web的功能,無需其他配置更哄。
四芋齿、無代碼生成和XML配置
Spring Boot配置過程中無代碼生成,也無需XML配置文件就能完成所有配置工作成翩,這一切都是借助于 條件注解完成的觅捆,這也是Spring4.x的核心功能之一。
五麻敌、應用監(jiān)控
Spring Boot提供一系列端點可以監(jiān)控服務及應用栅炒,做健康檢測

3、Spring Boot 有哪些優(yōu)點?

Spring Boot 的優(yōu)點有:
1赢赊、減少開發(fā)乙漓,測試時間和努力。
2释移、使用 JavaCon?g 有助于避免使用 XML叭披。
3、避免大量的 Maven 導入和各種版本沖突玩讳。
4趋观、提供意見發(fā)展方法。
5锋边、通過提供默認值快速開始開發(fā)皱坛。
6、沒有單獨的 Web 服務器需要豆巨。這意味著你不再需要啟動 Tomcat剩辟,Glass?sh或其他任何東西。 7往扔、需要更少的配置 因為沒有 web.xml 文件贩猎。只需添加用@ Con?guration 注釋的類,然后添加用
@Bean 注釋的方法萍膛,Spring 將自動加載對象并像以前一樣對其進行管理吭服。您甚至可以將@Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關系中蝗罗。
8艇棕、基于環(huán)境的配置 使用這些屬性,您可以將您正在使用的環(huán)境傳遞到應用程序:-
Dspring.pro?les.active = {enviornment}串塑。在加載主應用程序?qū)傩晕募笳恿穑琒pring 將在 (application{environment} .properties)中加載后續(xù)的應用程序?qū)傩晕募?/p>

4、Spring Boot 的核心注解是哪個桩匪?它主要由哪幾個注解組成的打瘪?

啟動類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解傻昙,主要組合包含了以下
3 個注解:
@SpringBootCon?guration:組合了 @Con?guration 注解闺骚,實現(xiàn)配置文件的功能。
@EnableAutoCon?guration:打開自動配置的功能妆档,也可以關閉某個自動配置的選項僻爽,如關閉數(shù)據(jù)源 自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoCon?guration.class })。
@ComponentScan:Spring組件掃描

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

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

6进泼、如何理解 Spring Boot 中的 Starters蔗衡?

Starters是什么:
Starters可以理解為啟動器,它包含了一系列可以集成到應用里面的依賴包乳绕,你可以一站式集成Spring 及其他技術绞惦,而不需要到處找示例代碼和依賴包。如你想使用Spring JPA訪問數(shù)據(jù)庫洋措,只要加入 springboot-starter-data-jpa啟動器依賴就能使用了济蝉。Starters包含了許多項目中需要用到的依賴,它 們能快速持續(xù)的運行菠发,都是一系列得到支持的管理傳遞性依賴王滤。
Starters命名:
Spring Boot官方的啟動器都是以spring-boot-starter-命名的,代表了一個特定的應用類型滓鸠。第三方的 啟動器不能以spring-boot開頭命名雁乡,它們都被Spring Boot官方保留。一般一個第三方的應該這樣命 名糜俗,像mybatis的mybatis-spring-boot-starter踱稍。
Starters分類:

  1. Spring Boot應用類啟動器

    2.Spring Boot生產(chǎn)啟動器

    3.Spring Boot技術類啟動器
    4. 其他第三方啟動器

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

如果你想在Spring Boot啟動的時候運行一些特定的代碼珠月,你可以實現(xiàn)接口ApplicationRunner或者 CommandLineRunner,這兩個接口實現(xiàn)方式一樣楔敌,它們都只提供了一個run方法啤挎。 CommandLineRunner:啟動獲取命令行參數(shù)

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

可以不需要庆聘,內(nèi)置了 Tomcat/ Jetty 等容器

9、Spring Boot中的監(jiān)視器是什么氛谜?

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

10织盼、如何使用Spring Boot實現(xiàn)異常處理杨何?

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

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

Starters可以理解為啟動器,它包含了一系列可以集成到應用里面的依賴包唐全,你可以一站式集成 Spring 及其他技術埃跷,而不需要到處找示例代碼和依賴包蕊玷。如你想使用 Spring JPA 訪問數(shù)據(jù)庫,只要加入 spring-boot-starter-data-jpa 啟動器依賴就能使用了

12弥雹、springboot常用的starter有哪些

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

13垃帅、SpringBoot 實現(xiàn)熱部署有哪幾種方式

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

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

在 Spring Boot 里面剪勿,可以使用以下幾種方式來加載配置贸诚。
1)properties文件;
2)YAML文件厕吉;
3)系統(tǒng)環(huán)境變量酱固;
4)命令行參數(shù);
等等……

15头朱、Spring Boot 的核心配置文件有哪幾個运悲?它們的區(qū)別是什么?

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

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

16定踱、如何集成 Spring Boot 和 ActiveMQ

對于集成 Spring Boot 和 ActiveMQ,我們使用spring-boot-starter-activemq依賴關系恃鞋。 它只需要很 少的配置崖媚,并且不需要樣板代碼

17、什么是 JavaCon?g恤浪?

Spring JavaCon?g 是 Spring 社區(qū)的產(chǎn)品畅哑,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助于 避免使用 XML 配置水由。使用 JavaCon?g 的優(yōu)點在于:
1荠呐、面向?qū)ο蟮呐渲谩S捎谂渲帽欢x為 JavaCon?g 中的類砂客,因此用戶可以充分利用 Java 中的面向?qū)?象功能泥张。一個配置類可以繼承另一個,重寫它的@Bean 方法等鞠值。
2媚创、減少或消除 XML 配置⊥瘢基于依賴注入原則的外化配置的好處已被證明钞钙。但是鳄橘,許多開發(fā)人員不希望 在 XML 和 Java 之間來回切換。JavaCon?g 為開發(fā)人員提供了一種純 Java 方法來配置與 XML 配置概念 相似的 Spring 容器芒炼。從技術角度來講瘫怜,只使用 JavaCon?g 配置類來配置容器是可行的,但實際上很多 人認為將JavaCon?g 與 XML 混合匹配是理想的焕议。
3宝磨、類型安全和重構友好。JavaCon?g 提供了一種類型安全的方法來配置 Spring容器盅安。由于 Java 5.0 對 泛型的支持唤锉,現(xiàn)在可以按類型而不是按名稱檢索 bean,不需要任何強制轉(zhuǎn)換或基于字符串的查找别瞭。

18窿祥、如何重新加載 Spring Boot 上的更改,而無需重新啟動服務 器蝙寨?

這可以使用 DEV 工具來實現(xiàn)晒衩。通過這種依賴關系,您可以節(jié)省任何更改墙歪,嵌入式tomcat 將重新啟動听系。 Spring Boot 有一個開發(fā)工具(DevTools)模塊,它有助于提高開發(fā)人員的生產(chǎn)力虹菲。Java 開發(fā)人員面臨 的一個主要挑戰(zhàn)是將文件更改自動部署到服務器并自動重啟服務器靠胜。開發(fā)人員可以重新加載 Spring Boot 上的更改,而無需重新啟動服務器毕源。這將消除每次手動部署更改的需要浪漠。Spring Boot 在發(fā)布它的 第一個版本時沒有這個功能。這是開發(fā)人員最需要的功能霎褐。DevTools 模塊完全滿足開發(fā)人員的需求址愿。 該模塊將在生產(chǎn)環(huán)境中被禁用。它還提供 H2 數(shù)據(jù)庫控制臺以更好地測試應用程序。

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

19、Spring Boot 中的監(jiān)視器是什么?

Spring boot actuator 是 spring 啟動框架中的重要功能之一。Spring boot 監(jiān)視器可幫助您訪問生產(chǎn)環(huán) 境中正在運行的應用程序的當前狀態(tài)邮破。有幾個指標必須在生產(chǎn)環(huán)境中進行檢查和監(jiān)控。即使一些外部應 用程序可能正在使用這些服務來向相關人員觸發(fā)警報消息院仿。監(jiān)視器模塊公開了一組可直接作為 HTTP URL 訪問的REST 端點來檢查狀態(tài)芯急。

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

默認情況下枣购,所有敏感的 HTTP 端點都是安全的嬉探,只有具有 ACTUATOR 角色的用戶才能訪問它們。安 全性是使用標準的 HttpServletRequest.isUserInRole 方法實施的棉圈。 我們可以使用來禁用安全性涩堤。只有 在執(zhí)行機構端點在防火墻后訪問時,才建議禁用安全性分瘾。

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

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

server.port = 8090

22、什么是 YAML上岗?

YAML 是一種人類可讀的數(shù)據(jù)序列化語言福荸。它通常用于配置文件。
與屬性文件相比肴掷,如果我們想要在配置文件中添加復雜的屬性敬锐,YAML 文件就更加結(jié)構化,而且更少混 淆呆瞻√ǘ幔可以看出 YAML 具有分層配置數(shù)據(jù)。

23痴脾、如何實現(xiàn) Spring Boot 應用程序的安全性颤介?

為了實現(xiàn) Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項明郭,并且必須添加安全配 置买窟。它只需要很少的代碼。配置類將必須擴展WebSecurityCon?gurerAdapter 并覆蓋其方法薯定。

24始绍、如何集成 Spring Boot 和 ActiveMQ?

對于集成 Spring Boot 和 ActiveMQ话侄,我們使用
依賴關系亏推。 它只需要很少的配置,并且不需要樣板代碼年堆。

25吞杭、如何使用 Spring Boot 實現(xiàn)分頁和排序?

使用 Spring Boot 實現(xiàn)分頁非常簡單变丧。使用 Spring Data-JPA 可以實現(xiàn)將可分頁的傳遞給存儲庫方法芽狗。

26、什么是 Swagger痒蓬?你用 Spring Boot 實現(xiàn)了它嗎童擎?

Swagger 廣泛用于可視化 API滴劲,使用 Swagger UI 為前端開發(fā)人員提供在線沙箱。Swagger 是用于生成 RESTful Web 服務的可視化表示的工具顾复,規(guī)范和完整框架實現(xiàn)班挖。它使文檔能夠以與服務器相同的速度更 新。當通過 Swagger 正確定義時芯砸,消費者可以使用最少量的實現(xiàn)邏輯來理解遠程服務并與其進行交互萧芙。因此,Swagger消除了調(diào)用服務時的猜測假丧。

27双揪、什么是 Spring Pro?les?

Spring Pro?les 允許用戶根據(jù)配置文件(dev虎谢,test盟榴,prod 等)來注冊 bean。因此婴噩,當應用程序在開 發(fā)中運行時擎场,只有某些 bean 可以加載,而在 PRODUCTION中几莽,某些其他 bean 可以加載迅办。假設我們 的要求是 Swagger 文檔僅適用于 QA 環(huán)境,并且禁用所有其他文檔章蚣。這可以使用配置文件來完成站欺。 Spring Boot 使得使用配置文件非常簡單。

28纤垂、什么是 Spring Batch矾策?

Spring Boot Batch 提供可重用的函數(shù),這些函數(shù)在處理大量記錄時非常重要峭沦,包括日志/跟蹤贾虽,事務管 理,作業(yè)處理統(tǒng)計信息吼鱼,作業(yè)重新啟動蓬豁,跳過和資源管理。它還提供了更先進的技術服務和功能菇肃,通過 優(yōu)化和分區(qū)技術地粪,可以實現(xiàn)極高批量和高性能批處理作業(yè)。簡單以及復雜的大批量批處理作業(yè)可以高度 可擴展的方式利用框架處理重要大量的信息琐谤。

29蟆技、什么是 FreeMarker 模板?

FreeMarker 是一個基于 Java 的模板引擎,最初專注于使用 MVC 軟件架構進行動態(tài)網(wǎng)頁生成付魔。使用 Freemarker 的主要優(yōu)點是表示層和業(yè)務層的完全分離聊品。程序員可以處理應用程序代碼飞蹂,而設計人員可 以處理 html 頁面設計几苍。最后使用freemarker 可以將這些結(jié)合起來,給出最終的輸出頁面陈哑。

30妻坝、如何使用 Spring Boot 實現(xiàn)異常處理?

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

31界酒、您使用了哪些 starter maven 依賴項圣拄?

使用了下面的一些依賴項

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

這有助于增加更少的依賴關系,并減少版本的沖突毁欣。

32庇谆、什么是 CSRF 攻擊?

CSRF 代表跨站請求偽造凭疮。這是一種攻擊饭耳,迫使最終用戶在當前通過身份驗證的Web 應用程序上執(zhí)行不 需要的操作。CSRF 攻擊專門針對狀態(tài)改變請求执解,而不是數(shù)據(jù)竊取寞肖,因為攻擊者無法查看對偽造請求的 響應。
這有助于增加更少的依賴關系衰腌,并減少版本的沖突新蟆。

33、什么是 WebSockets右蕊?

WebSocket 是一種計算機通信協(xié)議琼稻,通過單個 TCP 連接提供全雙工通信信道。



1尤泽、WebSocket 是雙向的 -使用 WebSocket 客戶端或服務器可以發(fā)起消息發(fā)送欣簇。
2、WebSocket 是全雙工的 -客戶端和服務器通信是相互獨立的坯约。
3熊咽、單個 TCP 連接 -初始連接使用 HTTP,然后將此連接升級到基于套接字的連接闹丐。然后這個單一連接用 于所有未來的通信
4横殴、Light -與 http 相比,WebSocket 消息數(shù)據(jù)交換要輕得多。

34衫仑、什么是 AOP梨与?

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

35呻粹、什么是 Apache Kafka?

Apache Kafka 是一個分布式發(fā)布 - 訂閱消息系統(tǒng)苏研。它是一個可擴展的等浊,容錯的發(fā)布 - 訂閱消息系統(tǒng),它 使我們能夠構建分布式應用程序摹蘑。這是一個 Apache 頂級項目筹燕。Kafka 適合離線和在線消息消費。

36衅鹿、我們?nèi)绾伪O(jiān)視所有 Spring Boot 微服務撒踪?

Spring Boot 提供監(jiān)視器端點以監(jiān)控各個微服務的度量。這些端點對于獲取有關應用程序的信息(如它 們是否已啟動)以及它們的組件(如數(shù)據(jù)庫等)是否正常運行很有幫助塘安。但是糠涛,使用監(jiān)視器的一個主要 缺點或困難是,我們必須單獨打開應用程序的知識點以了解其狀態(tài)或健康狀況兼犯。想象一下涉及 50 個應 用程序的微服務忍捡,管理員將不得不擊中所有 50 個應用程序的執(zhí)行終端。為了幫助我們處理這種情況切黔, 我們將使用位于的開源項目砸脊。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI纬霞,使我們能 夠可視化多個應用程序的度量凌埂。

37、Spring Boot 的配置文件有哪幾種格式诗芜?它們有什么區(qū)別瞳抓?

.properties 和 .yml,它們的區(qū)別主要是書寫格式不同伏恐。

1).properties

app.user.name = javastack

2).yml

app:
  user:
    name: javastack

另外孩哑,.yml 格式不支持 @PropertySource 注解導入配置。

38翠桦、開啟 Spring Boot 特性有哪幾種方式横蜒?

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

39、Spring Boot 的目錄結(jié)構是怎樣的?

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

這個目錄結(jié)構是主流及推薦的做法丛晌,而在主入口類上加上 @SpringBootApplication 注解來開啟 Spring Boot 的各項能力仅炊,如自動配置、組件掃描等澎蛛。

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

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

41瓶竭、Spring Boot 自動配置原理是什么督勺?

注解 @EnableAutoCon?guration, @Con?guration, @ConditionalOnClass 就是自動配置的核心,首 先它得是一個配置文件斤贰,其次根據(jù)類路徑下是否有這個類去自動配置。

42次询、如何在 Spring Boot 啟動的時候運行一些特定的代碼荧恍?

可以實現(xiàn)接口 ApplicationRunner 或者 CommandLineRunner,這兩個接口實現(xiàn)方式一樣屯吊,它們都只 提供了一個 run 方法

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

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

44盒卸、Spring Boot 支持哪些日志框架骗爆?推薦和默認的日志框架是哪 個?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作為日志框架蔽介,如果你使用 Starters 啟動器摘投, Spring Boot 將使用 Logback 作為默認日志框架

45、Spring Boot 如何定義多套不同環(huán)境配置虹蓄?
提供多套配置文件犀呼,如:

applcation.properties
application-dev.properties
application-test.properties
application-prod.properties

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

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

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

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

  • 在生產(chǎn)中使用HTTPS
  • 使用Snyk檢查你的依賴關系 升級到最新版本
  • 啟用CSRF保護
  • 使用內(nèi)容安全策略防止XSS攻擊

48炭菌、Spring Boot 2.X 有什么新特性罪佳?與 1.X 有什么區(qū)別?

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

49娃兽、如何重新加載Spring Boot上的更改菇民,而無需重新啟動服務器?

這可以使用DEV工具來實現(xiàn)。通過這種依賴關系第练,您可以節(jié)省任何更改阔馋,嵌入式tomcat將重新啟動。 Spring Boot有一個開發(fā)工具(DevTools)模塊娇掏,它有助于提高開發(fā)人員的生產(chǎn)力呕寝。Java開發(fā)人員面臨 的一個主要挑戰(zhàn)是將文件更改自動部署到服務器并自動重啟服務器。
開發(fā)人員可以重新加載Spring Boot上的更改婴梧,而無需重新啟動服務器下梢。這將消除每次手動部署更改的 需要。Spring Boot在發(fā)布它的第一個版本時沒有這個功能塞蹭。
這是開發(fā)人員最需要的功能孽江。DevTools模塊完全滿足開發(fā)人員的需求。該模塊將在生產(chǎn)環(huán)境中被禁用番电。 它還提供H2數(shù)據(jù)庫控制臺以更好地測試應用程序岗屏。
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配置數(shù)據(jù)源信息

51漱办、Spring Boot这刷、Spring MVC 和 Spring 有什么區(qū)別?

SpringFrame
SpringFramework 最重要的特征是依賴注入娩井。所有 SpringModules 不是依賴注入就是 IOC 控制 反轉(zhuǎn)暇屋。
當我們恰當?shù)氖褂?DI 或者是 IOC 的時候,我們可以開發(fā)松耦合應用洞辣。松耦合應用的單元測試可以很容 易的進行咐刨。
SpringMVC
Spring MVC 提供了一種分離式的方法來開發(fā) Web 應用。通過運用像 DispatcherServelet屋彪, MoudlAndView 和 ViewResolver 等一些簡單的概念所宰,開發(fā) Web 應用將會變的非常簡單。
SpringBoot
Spring 和 SpringMVC 的問題在于需要配置大量的參數(shù)畜挥。

<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/"/>

Spring Boot 通過一個自動配置和啟動的項來目解決這個問題仔粥。為了更快的構建產(chǎn)品就緒應用程序, Spring Boot 提供了一些非功能性特征蟹但。

52躯泰、什么是 Spring Boot Stater ?

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

例如诵竭,如果你想使用 Sping 和 JPA 訪問數(shù)據(jù)庫话告,只需要你的項目包含 spring-boot-starter-data-jpa 依 賴項,你就可以完美進行卵慰。
問題四 你能否舉一個例子來解釋更多 Staters 的內(nèi)容沙郭?
讓我們來思考一個 Stater 的例子 -Spring Boot Stater Web。
如果你想開發(fā)一個 web 應用程序或者是公開 REST 服務的應用程序裳朋。Spring Boot Start Web 是首選病线。
讓我們使用 Spring Initializr 創(chuàng)建一個 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

任何經(jīng)典的 Web 應用程序都會使用所有這些依賴項暖眼。Spring Boot Starter Web 預先打包了這些依賴 項惕耕。

作為一個開發(fā)者,我不需要再擔心這些依賴項和它們的兼容版本罢荡。

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

Spring Boot 也提供了其它的啟動器項目包括区赵,包括用于開發(fā)特定類型應用程序的典型依賴項。
spring-boot-starter-web-services - SOAP Web Services
spring-boot-starter-web - Web 和 RESTful 應用程序
spring-boot-starter-test - 單元測試和集成測試
spring-boot-starter-jdbc - 傳統(tǒng)的 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 是如何快速創(chuàng)建產(chǎn)品就緒應用程序的笼才?

Spring Boot 致力于快速產(chǎn)品就緒應用程序。為此络凿,它提供了一些譬如高速緩存骡送,日志記錄,監(jiān)控和嵌 入式服務器等開箱即用的非功能性特征絮记。
spring-boot-starter-actuator - 使用一些如監(jiān)控和跟蹤應用的高級功能
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 已經(jīng)不再支持怨愤。
推薦閱讀:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0.0-M1-Release-Notes

55派敷、創(chuàng)建一個 Spring Boot Project 的最簡單的方法是什么?

Spring Initializr是啟動 Spring Boot Projects 的一個很好的工具撰洗。
  • 就像上圖中所展示的一樣篮愉,我們需要做一下幾步:
  • 登錄 Spring Initializr,按照以下方式進行選擇:
  • 選擇 com.in28minutes.springboot 為組
  • 選擇 studet-services 為組件
  • 選擇下面的依賴項
  • Web
  • Actuator
  • DevTools
  • 點擊生 GenerateProject
  • 將項目導入 Eclipse差导。文件 - 導入 - 現(xiàn)有的 Maven 項目

56试躏、Spring Initializr 是創(chuàng)建 Spring Boot Projects 的唯一方法 嗎?

不是的设褐。
Spring Initiatlizr 讓創(chuàng)建 Spring Boot 項目變的很容易颠蕴,但是泣刹,你也可以通過設置一個 maven 項目并添 加正確的依賴項來開始一個項目。
在我們的 Spring 課程中犀被,我們使用兩種方法來創(chuàng)建項目椅您。
第一種方法是 start.spring.io 。
另外一種方法是在項目的標題為“Basic Web Application”處進行手動設置弱判。
手動設置一個 maven 項目
這里有幾個重要的步驟:

  • 在 Eclipse 中襟沮,使用文件 - 新建 Maven 項目來創(chuàng)建一個新項目 添加依賴項。
  • 添加 maven 插件昌腰。
  • 添加 Spring Boot 應用程序類开伏。
    到這里,準備工作已經(jīng)做好遭商!

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

使用 Spring Boot 開發(fā)工具劫流。
把 Spring Boot 開發(fā)工具添加進入你的項目是簡單的巫玻。
把下面的依賴項添加至你的 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/.
在我測試的時候可很,發(fā)現(xiàn)了 LiveReload 漏洞诗力,如果你測試時也發(fā)現(xiàn)了,請一定要告訴我們我抠。

58苇本、 什么是嵌入式服務器?我們?yōu)槭裁匆褂们度胧椒掌髂?

思考一下在你的虛擬機上部署應用程序需要些什么菜拓。
第一步: 安裝 Java
第二部: 安裝 Web 或者是應用程序的服務器(Tomat/Wbesphere/Weblogic 等等) 第三部: 部署應用程序 war 包
如果我們想簡化這些步驟瓣窄,應該如何做呢?
讓我們來思考如何使服務器成為應用程序的一部分纳鼎?
你只需要一個安裝了 Java 的虛擬機俺夕,就可以直接在上面部署應用程序了,
是不是很爽喷橙?
這個想法是嵌入式服務器的起源啥么。
當我們創(chuàng)建一個可以部署的應用程序的時候,我們將會把服務器(例如贰逾,tomcat)嵌入到可部署的服務 器中悬荣。
例如,對于一個 Spring Boot 應用程序來說疙剑,你可以生成一個包含 Embedded Tomcat 的應用程 序 jar氯迂。你就可以想運行正常 Java 應用程序一樣來運行 web 應用程序了践叠。
嵌入式服務器就是我們的可執(zhí)行單元包含服務器的二進制文件(例如,tomcat.jar)嚼蚀。

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

在源文件夾下轿曙,創(chuàng)建一個名為 static 的文件夾弄捕。然后,你可以把你的靜態(tài)的內(nèi)容放在這里面导帝。 例如守谓,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

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

60檐盟、什么是 Spring Date?
來自://projects.spring.io/spring- data/

Spring Data 的使命是在保證底層數(shù)據(jù)存儲特殊性的前提下轴合,為數(shù)據(jù)訪問提供一個熟悉的虐秦,一致 性的平酿,基于 Spring 的編程模型。這使得使用數(shù)據(jù)訪問技術悦陋,關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫蜈彼,map-reduce 框架以及基于云的數(shù)據(jù)服務變得很容易。

為了讓它更簡單一些俺驶,Spring Data 提供了不受底層數(shù)據(jù)源限制的 Abstractions 接口柳刮。 下面來舉一個例子

interface TodoRepository extends CrudRepository<Todo, Long> {

你可以定義一簡單的庫,用來插入痒钝,更新,刪除和檢索代辦事項痢毒,而不需要編寫大量的代碼送矩。

61、什么是 Spring Data REST?

Spring Data TEST 可以用來發(fā)布關于 Spring 數(shù)據(jù)庫的 HATEOAS RESTful 資源哪替。 下面是一個使用 JPA 的例子

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

不需要寫太多代碼栋荸,我們可以發(fā)布關于 Spring 數(shù)據(jù)庫的 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 
}

響應內(nèi)容

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

響應包含新創(chuàng)建資源的 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 應用程序運行時钝尸,后臺會發(fā) 生什么括享?

如果你使用 Eclipse IDE,Eclipse maven 插件確保依賴項或者類文件的改變一經(jīng)添加珍促,就會被編譯并在 目標文件中準備好铃辖!在這之后,就和其它的 Java 應用程序一樣了猪叙。
當你啟動 java 應用程序的時候娇斩,spring boot 自動配置文件就會魔法般的啟用了。

  • 當 Spring Boot 應用程序檢測到你正在開發(fā)一個 web 應用程序的時候穴翩,它就會啟動 tomcat犬第。

64、我們能否在 spring-boot-starter-web 中用 jetty 代替 tomcat藏否?
在 spring-boot-starter-web 移除現(xiàn)有的依賴項瓶殃,并把下面這些添加進去。

<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-m aven-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 你可以把你的數(shù)據(jù)實體作為 RESTful 服務直接發(fā)布。
當你設計 RESTful 服務器的時候琳要,最佳實踐表明寡具,你的接口應該考慮到兩件重要的事情:

  • 你的模型范圍。
  • 你的客戶稚补。
    通過 With Spring Data REST童叠,你不需要再考慮這兩個方面,只需要作為 TEST 服務發(fā)布實體孔厉。
    這就是為什么我們建議使用 Spring Data Rest 在快速原型構造上面拯钻,或者作為項目的初始解決方法帖努。對 于完整演變項目來說,這并不是一個好的注意粪般。

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

好消息是你可以定制它匙监。點擊鏈接“轉(zhuǎn)到完整版本”。你可以配置你想要修改的包名稱小作!

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

這里是完整的指南:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-proper ties.html

71顾稀、JPA 和 Hibernate 有哪些區(qū)別达罗?

簡而言之

  • JPA 是一個規(guī)范或者接口
  • Hibernate 是 JPA 的一個實現(xiàn)
    當我們使用 JPA 的時候,我們使用 javax.persistence 包中的注釋和接口時静秆,不需要使用 hibernate 的 導入包粮揉。
    我們建議使用 JPA 注釋,因為哦我們沒有將其綁定到 Hibernate 作為實現(xiàn)抚笔。后來(我知道 - 小于百分之 一的幾率)扶认,我們可以使用另一種 JPA 實現(xiàn)。

72殊橙、使用 Spring Boot 啟動連接到內(nèi)存數(shù)據(jù)庫 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>

需要注意的一些地方:

  • 一個內(nèi)部數(shù)據(jù)內(nèi)存只在應用程序執(zhí)行期間存在。這是學習框架的有效方式膨蛮。
  • 這不是你希望的真是世界應用程序的方式叠纹。
  • 在問題“如何連接一個外部數(shù)據(jù)庫?”中敞葛,我們解釋了如何連接一個你所選擇的數(shù)據(jù)庫吊洼。

73、如何不通過任何配置來選擇 Hibernate 作為 JPA 的默認實現(xiàn)制肮?
因為 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 實現(xiàn)。

74款慨、指定的數(shù)據(jù)庫連接信息在哪里儒飒?它是如何知道自動連接至 H2 的?

這就是 Spring Boot 自動配置的魔力檩奠。
來自:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-con?gurat ion.html
Spring Boot auto-con?guration 試圖自動配置你已經(jīng)添加的基于 jar 依賴項的 Spring 應用程序桩了。比如 說附帽,如果 HSQLDBis 存在你的類路徑中,并且井誉,數(shù)據(jù)庫連接 bean 還沒有手動配置蕉扮,那么我們可以自動 配置一個內(nèi)存數(shù)據(jù)庫。
進一步的閱讀:
http://www.springboottutorial.com/spring-boot-auto-con?guration

75颗圣、我們?nèi)绾芜B接一個像 MSSQL 或者 orcale 一樣的外部數(shù)據(jù)庫喳钟?
讓我們以 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 數(shù)據(jù)庫
更多的來看看這里 -https://github.com/in28minutes/jpa-with-hibernate#installing-and-setting-upmysql
第四步 - 配置你的 MySQL 數(shù)據(jù)庫連接
配置 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 數(shù)據(jù)庫的名字是上面易茬?為什么默認 的數(shù)據(jù)庫名字是 testdb?

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

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

如果你使用了 H2 內(nèi)部存儲數(shù)據(jù)庫抽莱,它里面確定了 Spring Boot 用來安裝你的 H2 數(shù)據(jù)庫的名字。

77写半、如果 H2 不在類路徑里面岸蜗,會出現(xiàn)上面情況?
將會報下面的錯誤

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 為事務管理的例子?

當你從數(shù)據(jù)庫讀取內(nèi)容的時候悔捶,你想把事物中的用戶描述或者是其它描述設置為只讀模式铃慷,以便于 Hebernate 不需要再次檢查實體的變化。這是非常高效的蜕该。

79犁柜、發(fā)布 Spring Boot 用戶應用程序自定義配置的最好方法是什 么?

@Value 的問題在于堂淡,您可以通過應用程序分配你配置值馋缅。更好的操作是采取集中的方法。 你可以使用 @Con?gurationProperties 定義一個配置組件绢淀。

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

你可以在 application.properties 中配置參數(shù)萤悴。

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

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

企業(yè)應用程序的開發(fā)是復雜的覆履,你需要混合的環(huán)境:

  • Dev
  • QA
  • Stage
  • Production
    在每個環(huán)境中,你想要不同的應用程序配置。
    配置文件有助于在不同的環(huán)境中進行不同的應用程序配置硝全。
    Spring 和 Spring Boot 提供了你可以制定的功能栖雾。
  • 不同配置文件中,不同環(huán)境的配置是什么伟众?
  • 為一個制定的環(huán)境設置活動的配置文件析藕。
    Spring Boot 將會根據(jù)特定環(huán)境中設置的活動配置文件來選擇應用程序的配置。

81赂鲤、如何使用配置文件通過 Spring Boot 配置特定環(huán)境的配置噪径?
配置文件不是設別環(huán)境的關鍵。
在下面的例子中数初,我們將會用到兩個配置文件

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

我們想要為 dev 文件自定義 application.properties 屬性。我們需要創(chuàng)建一個名為 applicationdev.properties 的文件泡孩,并且重寫我們想要自定義的屬性车摄。
application-dev.properties

basic.message: Dynamic Message in DEV

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

82吮播、我們?nèi)绾问褂肕aven設置Spring Boot應用程序?

我們可以像在任何其他庫中一樣在Maven項目中包含Spring Boot,但是,最好的方法是從springboot-starter-parent項目繼承并聲明依賴于Spring Boot啟動器眼俊。這樣做可以讓我們的項目重用Spring Boot的默認設置意狠。繼承spring-boot-starter-parent項目非常簡單-我們只需要在pom.xml中指定一個parent元素:

我們可以在Maven 中央倉庫找到最新版本的 spring-boot-starter-parent 。 上面的方式很方便但是 并不一定符合實際需要疮胖。例如公司要求所有項目依賴構建從一個標準BOM開始环戈,我們就不能按上面的 方式進行。 在這種情況下澎灸,我們可以進行如下引用:

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

如果我們要禁用特定的自動配置,我們可以使用@EnabTeAutoconfiguration注解的exclude屬性來指示它性昭。如下禁用了數(shù)據(jù)源自動配置DatasourceAutoconfiguration :


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

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

84糜颠、Spring boot支持哪些外部配置汹族?


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

在為Spring應用程序運行集成測試時,我們必須有一個Applicationcontext.為了簡化測試,Spring Boot為測試提供了一個特殊的注釋@springBootTest,此批注從其classes屬性指示的配置類創(chuàng)建Applicationcontext.如果未設置classes屬性, Spring Boo將搜索主配置類鞠抑。搜索從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration注釋的類。請注意,如果我們使用Junit 4,我們必須用@Runwith (SpringRunner.CTass)裝飾測試類忌警。

86、Spring Boot Actuator有什么用?

spring Boot Actuator可以幫助你監(jiān)控和管理Spring Boot應用,比如健康檢查法绵、審計箕速、統(tǒng)計和HTTP追蹤等。所有的這些特性可以通過JMX或者HTTp endpoints來獲得朋譬。Actuator同時還可以與外部應用監(jiān)控系統(tǒng)整合,比如Prometheus, Graphite , DataDog, Influx , wavefront, New Relic等盐茎。這些系統(tǒng)提供了非常好的儀表盤、圖標徙赢、分析和告警等功能,使得你可以通過統(tǒng)一的接口輕松的監(jiān)控和管理你的應用字柠。 Actuator使用Micrometer來整合上面提到的外部應用監(jiān)控系統(tǒng)。這使得只要通過非常小的配置就可以集成任何應用監(jiān)控系統(tǒng)狡赐。將Spring Boot Actuator集成到一個項目中非常簡單窑业。我們需要做的就是在pom.xml文件中包含spring-boot-starter-actuator啟動器:


spring Boot Actuator可以使用HTTP或JMx端點公開操作信息。但是,大多數(shù)應用程序都使用. HTTP ,其中端點的標識和/執(zhí)行器前綴形成URL路徑枕屉。以下是Actuator提供的一些最常見的內(nèi)置端點:
auditevents : 公開審計事件信息
env : 公開環(huán)境屬性
health : 顯示應用程序運行狀況信息
httptrace : 顯示HTTP跟蹤信息
info : 顯示任意應用程序信息
metrics : 顯示指標信息
mappings : 顯示所有@RequestMapping路徑的列表 scheduledtasks : 顯示應用程序中的計劃任務 threaddump : 執(zhí)行線程轉(zhuǎn)儲
`beans :所有加載的spring bean
請注意:生產(chǎn)使用 Actuator務必保護好這些端點常柄,避免未授權的訪問請求。

87搀擂、SpringBoot 中靜態(tài)首頁默認位置可以放在哪里西潘?

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

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

88喷市、SpringBoot 中靜態(tài)資源直接映射的優(yōu)先級是怎樣的?

SpringBoot 靜態(tài)資源直接映射為/**威恼,可以通過根目錄來訪問品姓。/META-INF/resources/webjars/映射 為/webjars/,通過訪問 /webjar 訪問沃测。優(yōu)先級順序為:META-INF/resources > resources > static > public缭黔。

89、繼承 WebMvcCon?gurerAdapter 抽象類蒂破,常用的重寫方法列 舉幾個馏谨?
WebMvcCon?gurerAdapter 實現(xiàn) WebMvcCon?gurer 接口,常用的可能需要重寫的方法有下面幾 個:

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

90附迷、@SpringBootApplication 引入了哪3個重要的注解惧互?

@SpringBootCon?guration、@EnableAutoCon?guration喇伯、@ComponentScan喊儡。其它的 4 個
@Target、@Retention稻据、@Documented艾猜、@Inherited,也重要,但應該不是本題想問的知識點匆赃。

91淤毛、@SpringBootApplication 注解中的屬性相當于哪幾個注解?

等價于以默認屬性使用 @Con?guration算柳,@EnableAutoCon?guration 和 @ComponentScan低淡。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞬项,隨后出現(xiàn)的幾起案子蔗蹋,更是在濱河造成了極大的恐慌,老刑警劉巖囱淋,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪杭,死亡現(xiàn)場離奇詭異,居然都是意外死亡绎橘,警方通過查閱死者的電腦和手機胁孙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來称鳞,“玉大人涮较,你說我怎么就攤上這事「灾梗” “怎么了狂票?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熙暴。 經(jīng)常有香客問我闺属,道長,這世上最難降的妖魔是什么周霉? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任掂器,我火速辦了婚禮,結(jié)果婚禮上俱箱,老公的妹妹穿的比我還像新娘国瓮。我一直安慰自己,他們只是感情好狞谱,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布乃摹。 她就那樣靜靜地躺著,像睡著了一般跟衅。 火紅的嫁衣襯著肌膚如雪孵睬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天伶跷,我揣著相機與錄音掰读,去河邊找鬼秘狞。 笑死,一個胖子當著我的面吹牛蹈集,可吹牛的內(nèi)容都是我干的谒撼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼雾狈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抵皱?” 一聲冷哼從身側(cè)響起善榛,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呻畸,沒想到半個月后移盆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡伤为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年咒循,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绞愚。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡叙甸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出位衩,到底是詐尸還是另有隱情裆蒸,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布糖驴,位于F島的核電站僚祷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贮缕。R本人自食惡果不足惜辙谜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感昼。 院中可真熱鬧装哆,春花似錦、人聲如沸抑诸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜕乡。三九已至奸绷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間层玲,已是汗流浹背号醉。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工反症, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畔派。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓铅碍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親线椰。 傳聞我的和親對象是個殘疾皇子胞谈,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容