Q: 什么是spring boot驻呐?
A: 多年來(lái),隨著新功能的增加疏魏,spring變得越來(lái)越復(fù)雜蛉艾。只需訪問(wèn)頁(yè)面https://spring.io/projects钳踊,我們將看到所有在應(yīng)用程序中使用的不同功能的spring項(xiàng)目衷敌。如果必須啟動(dòng)一個(gè)新的spring項(xiàng)目,我們必須添加構(gòu)建路徑或maven依賴項(xiàng)拓瞪,配置application server缴罗,添加spring配置。因此祭埂,啟動(dòng)一個(gè)新的spring項(xiàng)目需要大量的工作瞒爬,因?yàn)槲覀兡壳氨仨殢念^開(kāi)始做所有事情。Spring Boot是這個(gè)問(wèn)題的解決方案沟堡。Spring boot構(gòu)建在現(xiàn)有Spring框架之上侧但。使用spring boot,我們可以避免以前必須執(zhí)行的所有樣板代碼和配置航罗。因此禀横,Spring boot幫助我們更健壯地使用現(xiàn)有的Spring功能,并且只需最少的工作量粥血。
Q:Spring Boot的優(yōu)點(diǎn)是什么?
A: Spring Boot的優(yōu)點(diǎn)是
減少開(kāi)發(fā)柏锄、測(cè)試的時(shí)間和工作量。
使用JavaConfig有助于避免使用XML复亏。
避免大量maven導(dǎo)入和各種版本沖突趾娃。
提供可選的開(kāi)發(fā)方法。
通過(guò)提供默認(rèn)開(kāi)發(fā)方式進(jìn)行快速開(kāi)發(fā)缔御。
不需要單獨(dú)的Web服務(wù)器抬闷。這意味著您不再需要啟動(dòng)Tomcat、Glassfish或其他任何東西耕突。
由于沒(méi)有web.xml文件笤成,所以需要更少的配置。只需添加帶@ configuration注釋的類眷茁,然后可以添加帶@ bean注釋的方法炕泳,Spring將自動(dòng)加載對(duì)象并像往常一樣管理它。您甚至可以將@Autowired添加到bean方法中上祈,使Spring autowire成為bean所需的依賴項(xiàng)培遵。
基于環(huán)境的配置——使用這些屬性,您可以將其傳遞到您正在使用的應(yīng)用程序環(huán)境中:- dspring .profile .active={enviorement}登刺。在加載主應(yīng)用程序?qū)傩晕募笞淹螅琒pring將在(application-{environment}.properties)處加載后續(xù)的應(yīng)用程序?qū)傩晕募?/p>
Q:您使用過(guò)哪些構(gòu)建工具來(lái)開(kāi)發(fā)Spring引導(dǎo)應(yīng)用程序?
A: Spring Boot應(yīng)用程序可以使用Maven和Gradle開(kāi)發(fā)。
Q:什么是JavaConfig?
A:Spring JavaConfig是Spring社區(qū)的一個(gè)產(chǎn)品塘砸,它提供了一種純java方法來(lái)配置Spring IoC容器节仿。因此,它有助于避免使用XML配置掉蔬。使用JavaConfig的優(yōu)點(diǎn)是:
面向?qū)ο蟮呐渲美认堋R驗(yàn)榕渲迷贘avaConfig中定義為類,所以用戶可以充分利用Java中的面向?qū)ο筇匦耘巍R粋€(gè)配置類可以子類化另一個(gè)配置類箭启,覆蓋它的@Bean方法,等等蛉迹。
減少或消除XML配置傅寡。已經(jīng)證明了基于依賴注入原則的外部化配置的好處。然而北救,許多開(kāi)發(fā)人員不愿意在XML和Java之間來(lái)回切換荐操。JavaConfig為開(kāi)發(fā)人員提供了一種純java方法來(lái)配置Spring容器,這種方法在概念上類似于XML配置珍策。從技術(shù)上講托启,僅使用 JavaConfig配置類來(lái)配置容器是可行的,但是在實(shí)踐中攘宙,許多人發(fā)現(xiàn)將JavaConfig與XML混合并匹配是理想的屯耸。
類型安全的重構(gòu)能力。JavaConfig提供了一種類型安全的配置Spring容器的方法蹭劈。由于Java 5.0對(duì)泛型的支持疗绣,現(xiàn)在可以通過(guò)類型而不是名稱檢索bean,不需要進(jìn)行任何基于類型轉(zhuǎn)換或字符串的查找铺韧。
問(wèn):如何在不重啟服務(wù)器的情況下在Spring引導(dǎo)時(shí)重新加載我的更改?
答:這可以通過(guò)開(kāi)發(fā)工具來(lái)實(shí)現(xiàn)多矮。有了這個(gè)依賴項(xiàng),您保存的任何更改都將重新啟動(dòng)嵌入的tomcat哈打。Spring Boot有一個(gè)開(kāi)發(fā)人員工具(DevTools)模塊工窍,它有助于提高開(kāi)發(fā)人員的工作效率。Java開(kāi)發(fā)人員面臨的關(guān)鍵挑戰(zhàn)之一是將文件更改自動(dòng)部署到服務(wù)器并自動(dòng)重啟服務(wù)器前酿。開(kāi)發(fā)人員可以在Spring引導(dǎo)時(shí)重新加載更改患雏,而不必重新啟動(dòng)服務(wù)器。這將消除每次手動(dòng)部署更改的需要罢维。Spring Boot在發(fā)布第一個(gè)版本時(shí)沒(méi)有這個(gè)特性淹仑。這是開(kāi)發(fā)人員最需要的特性。DevTools模塊完全滿足開(kāi)發(fā)人員的需求肺孵。此模塊將在生產(chǎn)環(huán)境中禁用匀借。它還提供了H2-database控制臺(tái),以便更好地測(cè)試應(yīng)用程序平窘。使用以下依賴項(xiàng)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
下面的示例演示了自動(dòng)啟動(dòng)和H2 DB控制臺(tái)的DevTool依賴項(xiàng)用法
問(wèn):什么是Spring boot actuator?
答:Spring boot actuator是Spring boot framework的重要特性之一吓肋。Spring boot actuator幫助您訪問(wèn)生產(chǎn)環(huán)境中正在運(yùn)行的應(yīng)用程序的當(dāng)前狀態(tài),在生產(chǎn)環(huán)境中必須檢查和監(jiān)視幾個(gè)指標(biāo)瑰艘。甚至一些外部應(yīng)用程序也可能使用這些服務(wù)來(lái)觸發(fā)對(duì)相關(guān)人員的警報(bào)消息是鬼。actuator模塊公開(kāi)一組REST端點(diǎn)肤舞,這些端點(diǎn)可以作為HTTP URL直接訪問(wèn),以檢查狀態(tài)均蜜。
問(wèn):如何將Spring Boot應(yīng)用程序作為war包部署?
答:Spring Boot WAR部署
問(wèn):什么是Docker嗎?如何將Spring引導(dǎo)應(yīng)用程序部署到Docker?
A: Docker是什么
將基于Spring的WAR應(yīng)用程序部署到Docker
將基于Spring的JAR應(yīng)用程序部署到Docker
問(wèn):如何禁用執(zhí)行器端點(diǎn)安全在Spring啟動(dòng)?
答:默認(rèn)情況下李剖,所有敏感的HTTP端點(diǎn)都是安全的,只有具有ACTUATOR角色的用戶才能訪問(wèn)它們囤耳。安全性是使用標(biāo)準(zhǔn)HttpServletRequest.isUserInRole方法實(shí)現(xiàn)的篙顺。
我們可以使用-禁用安全性
management.security.enabled = false
建議僅當(dāng)在防火墻后訪問(wèn)ACTUATOR端點(diǎn)時(shí)禁用安全性。
問(wèn):如何將Spring引導(dǎo)應(yīng)用程序運(yùn)行到自定義端口?
要在自定義端口上運(yùn)行spring引導(dǎo)應(yīng)用程序充择,可以在application.properties中指定端口德玫。
server.port = 8090
問(wèn):什么是ELK堆棧?如何與Spring Boot一起使用?
答:ELK堆棧由三個(gè)開(kāi)源產(chǎn)品組成——Elasticsearch、Logstash和Kibana from Elastic椎麦。
Elasticsearch是一個(gè)基于Lucene搜索引擎的NoSQL數(shù)據(jù)庫(kù)宰僧。
Logstash是一個(gè)日志管道工具,它接受來(lái)自不同來(lái)源的輸入铃剔,執(zhí)行不同的轉(zhuǎn)換撒桨,并將數(shù)據(jù)導(dǎo)出到不同的目標(biāo)。它是一個(gè)動(dòng)態(tài)的數(shù)據(jù)收集管道键兜,具有可擴(kuò)展的插件生態(tài)系統(tǒng)和強(qiáng)大的彈性搜索協(xié)同作用
Kibana是一個(gè)可視化UI層凤类,工作在Elasticsearch之上。
這三個(gè)項(xiàng)目一起用于各種環(huán)境中的日志分析普气。因此Logstash收集和解析日志谜疤、彈性搜索索引并存儲(chǔ)這些信息,而Kibana提供了一個(gè)UI層现诀,提供可操作的可見(jiàn)性夷磕。
Spring Boot + ELK stack
問(wèn):您有使用Spring Boot編寫測(cè)試用例嗎?
答:SpringBoot為編寫單元測(cè)試用例提供了@SpringBootTest
Spring引導(dǎo)單元測(cè)試的簡(jiǎn)單示例
問(wèn):YAML是什么?
答:YAML是一種人類可讀的數(shù)據(jù)序列化語(yǔ)言。它通常用于配置文件仔沿。
與屬性文件相比坐桩,YAML文件的結(jié)構(gòu)更加結(jié)構(gòu)化,如果我們希望在配置文件中添加復(fù)雜的屬性封锉,那么它不會(huì)造成太大的混亂绵跷。可以看到成福,YAML具有分層的配置數(shù)據(jù)碾局。
在Spring引導(dǎo)中使用YAML屬性
問(wèn):如何為Spring引導(dǎo)應(yīng)用程序?qū)崿F(xiàn)安全性?
答:為了實(shí)現(xiàn)Spring Boot的安全性,我們使用Spring - Boot -starter-security依賴項(xiàng)奴艾,必須添加安全配置净当。它只需要很少的代碼。Config類必須擴(kuò)展WebSecurityConfigurerAdapter并覆蓋它的方法。
Spring引導(dǎo)安全性示例和說(shuō)明
問(wèn):您是否集成了Spring Boot和ActiveMQ ?
為了集成Spring Boot和ActiveMQ像啼,我們使用Spring - Boot -starter- ActiveMQ依賴項(xiàng)俘闯,它只需要很少的配置,沒(méi)有樣板代碼埋合。
Spring引導(dǎo)ActiveMQ說(shuō)明
問(wèn):您是否集成了Spring Boot和Apache Kafka ?
答:為了集成Spring Boot和Apache Kafka备徐,我們使用Spring - Kafka依賴項(xiàng)萄传。
Spring Boot + Apache Kafka示例
問(wèn):如何使用Spring引導(dǎo)實(shí)現(xiàn)分頁(yè)和排序?
答:使用Spring Boot實(shí)現(xiàn)分頁(yè)非常簡(jiǎn)單甚颂。使用Spring Data-JPA,這是通過(guò)傳遞可分頁(yè)的org.springframe .data.domain來(lái)實(shí)現(xiàn)的秀菱≌裎埽可分頁(yè)到存儲(chǔ)庫(kù)方法。
Spring引導(dǎo)分頁(yè)說(shuō)明
問(wèn):什么是Swagger?您是否使用Spring Boot實(shí)現(xiàn)了它?
答:Swagger被廣泛用于可視化api衍菱,Swagger UI為前端開(kāi)發(fā)人員提供在線沙箱環(huán)境赶么。在本教程中,我們將使用Swagger 2規(guī)范的Springfox實(shí)現(xiàn)脊串。Swagger是一種工具辫呻、規(guī)范和完整的框架實(shí)現(xiàn),用于生成RESTful Web服務(wù)的可視化表示琼锋。它允許文檔以與服務(wù)器相同的速度更新放闺。當(dāng)通過(guò)Swagger正確定義時(shí),使用者可以用最少的實(shí)現(xiàn)邏輯理解遠(yuǎn)程服務(wù)并與之交互缕坎。因此Swagger消除了調(diào)用服務(wù)時(shí)的猜測(cè)怖侦。
Spring Boot + Swagger2
問(wèn):什么是Spring Profiles?如何使用Spring Boot實(shí)現(xiàn)它?
答:Spring Profiles允許用戶根據(jù)配置文件(dev, test, prod等)注冊(cè)bean。因此谜叹,當(dāng)應(yīng)用程序在開(kāi)發(fā)中運(yùn)行時(shí)匾寝,只能加載某些bean,當(dāng)應(yīng)用程序在生產(chǎn)中運(yùn)行時(shí)荷腊,只能加載某些其他bean艳悔。假設(shè)我們的需求是Swagger文檔只對(duì)QA環(huán)境啟用,對(duì)所有其他環(huán)境禁用女仰。這可以使用配置文件來(lái)完成猜年。Spring Boot使得使用配置文件非常容易。
Spring引導(dǎo)+配置文件
什么是Spring Boot Batch?如何使用Spring Boot實(shí)現(xiàn)它?
答:Spring Boot Batch提供了處理大量記錄所必需的可重用功能董栽,包括日志/跟蹤码倦、事務(wù)管理、作業(yè)處理統(tǒng)計(jì)信息锭碳、作業(yè)重啟袁稽、作業(yè)跳過(guò)和資源管理。它還提供了更高級(jí)的技術(shù)服務(wù)和特性擒抛,通過(guò)優(yōu)化和分區(qū)技術(shù)推汽,這些特性將支持極高容量和高性能的批處理作業(yè)补疑。無(wú)論是簡(jiǎn)單的還是復(fù)雜的,大容量批處理作業(yè)都可以以高度可伸縮的方式利用該框架來(lái)處理大量信息歹撒。
Spring Boot Batch
問(wèn):什么是FreeMarker模板?如何使用Spring Boot實(shí)現(xiàn)它?
答:FreeMarker是一個(gè)基于java的模板引擎莲组,最初專注于使用MVC軟件架構(gòu)生成動(dòng)態(tài)web頁(yè)面。使用Freemarker的主要優(yōu)勢(shì)是完全分離了表示層和業(yè)務(wù)層暖夭。程序員可以處理應(yīng)用程序代碼锹杈,而設(shè)計(jì)人員可以處理html頁(yè)面設(shè)計(jì)。最后迈着,使用freemarker竭望,這些可以組合在一起,給出最終的輸出頁(yè)面裕菠。
Spring Boot + FreeMarker的例子
問(wèn):如何使用Spring Boot實(shí)現(xiàn)異常處理?
答:Spring提供了一種非常有用的方法咬清,可以使用ControllerAdvice處理異常。我們將實(shí)現(xiàn)一個(gè)ControlerAdvice類奴潘,它將處理控制器類拋出的所有異常旧烧。
Spring引導(dǎo)異常處理
什么是緩存?您在Spring引導(dǎo)中使用過(guò)緩存框架嗎?
答:緩存是本地內(nèi)存的一個(gè)區(qū)域,它保存了頻繁訪問(wèn)的數(shù)據(jù)的副本画髓,否則獲取或計(jì)算這些數(shù)據(jù)將非常昂貴掘剪。使用Hazelcast進(jìn)行緩存。
Spring Boot + Hazelcast示例
問(wèn):您是否使用Spring Boot公開(kāi)了SOAP web服務(wù)端點(diǎn)?
是的雀扶。使用Spring Boot公開(kāi)了要使用的web服務(wù)杖小。使用契約優(yōu)先的方法從wsdl生成類。
Spring引導(dǎo)+ SOAP Web服務(wù)示例
問(wèn):您如何使用Spring Boot執(zhí)行數(shù)據(jù)庫(kù)操作?
答:Spring引導(dǎo)教程-Spring Data JPA
Spring引導(dǎo)JDBC示例
問(wèn):如何使用Spring上傳文件?
A: Spring Boot +文件上傳的例子
問(wèn):如何用Spring Boot實(shí)現(xiàn)攔截器?
答:使用Spring MVC HandlerInterceptor與Spring引導(dǎo)
問(wèn):如何在Spring Boot下使用schedulers ?
答:Spring引導(dǎo)任務(wù)調(diào)度程序示例
問(wèn):您使用過(guò)哪些啟動(dòng)器maven依賴項(xiàng)?
答:使用過(guò)不同的starter依賴項(xiàng)愚墓,如spring-boot-starter-activemq依賴項(xiàng)予权、spring-boot-starter-security依賴項(xiàng)、spring-boot-starter-web依賴項(xiàng)浪册。
這有助于減少依賴項(xiàng)的數(shù)量扫腺,并減少版本組合。
Spring引導(dǎo)安全性示例和說(shuō)明
什么是CSRF攻擊?如何啟用CSRF對(duì)其進(jìn)行保護(hù)?
CSRF代表跨站請(qǐng)求偽造村象。它是一種攻擊笆环,迫使最終用戶在其當(dāng)前已經(jīng)過(guò)身份驗(yàn)證的web應(yīng)用程序上執(zhí)行不需要的操作。CSRF攻擊專門針對(duì)狀態(tài)更改請(qǐng)求厚者,而不是數(shù)據(jù)竊取躁劣,因?yàn)楣粽邿o(wú)法看到對(duì)偽造請(qǐng)求的響應(yīng)。
Spring引導(dǎo)安全性—啟用CSRF保護(hù)
問(wèn):如何使用Spring引導(dǎo)使用表單登錄身份驗(yàn)證?
答:Spring引導(dǎo)表單安全登錄Hello World示例
什么是OAuth2?如何使用Spring Boot實(shí)現(xiàn)它?
答:Spring Boot + OAuth2實(shí)現(xiàn)
問(wèn):GZIP是什么?如何使用Spring Boot實(shí)現(xiàn)它?
答:gzip是一種文件格式库菲,是一種用于文件壓縮和解壓縮的軟件應(yīng)用程序账忘。
Spring引導(dǎo)+ GZIP壓縮
問(wèn):您在Spring引導(dǎo)中使用過(guò)集成框架嗎?
答:已將Apache Camel與Spring引導(dǎo)集成。使用Apache Camel Spring啟動(dòng)啟動(dòng)依賴項(xiàng)。
Spring Boot +Apache Camel
問(wèn):什么是Apache Freemarker?什么時(shí)候使用它而不是JSP?如何與Spring Boot集成?
答:JSP是為網(wǎng)頁(yè)量身定做的鳖擒,F(xiàn)reemarker模板是一種更通用的模板語(yǔ)言——它可以用來(lái)生成html溉浙、純文本、電子郵件等蒋荚。
Spring Boot + FreeMarker的例子
問(wèn):你什么時(shí)候使用WebSockets?如何使用Spring Boot實(shí)現(xiàn)它?
答:WebSocket是一種計(jì)算機(jī)通信協(xié)議戳稽,通過(guò)單個(gè)TCP連接提供全雙工通信通道。
WebSocket是雙向的——使用WebSocket客戶端或服務(wù)器都可以發(fā)起發(fā)送消息期升。
WebSocket是全雙工的——客戶端和服務(wù)器之間的通信是相互獨(dú)立的惊奇。
單個(gè)TCP連接——初始連接使用HTTP,然后將此連接升級(jí)為基于套接字的連接吓妆。然后赊时,這個(gè)單一連接將用于未來(lái)的所有通信
輕- WebSocket消息數(shù)據(jù)交換比http輕得多吨铸。
Spring Boot + WebSockets的例子
什么是AOP?如何與Spring Boot一起使用?
答:在軟件開(kāi)發(fā)過(guò)程中行拢,跨越應(yīng)用程序多個(gè)點(diǎn)的功能稱為橫切關(guān)注點(diǎn)。這些橫切關(guān)注點(diǎn)不同于應(yīng)用程序的主要業(yè)務(wù)邏輯诞吱。因此舟奠,將這些橫切關(guān)注點(diǎn)從業(yè)務(wù)邏輯中分離出來(lái)是面向方面編程(AOP)的切入點(diǎn)泛啸。
Spring Boot + AOP示例
問(wèn):什么是Apache Kafka?如何與Spring Boot集成?
答:apache Kafka是一個(gè)分布式發(fā)布-訂閱消息傳遞系統(tǒng)嚼贡。它是一個(gè)可伸縮的、容錯(cuò)的帮掉、發(fā)布-訂閱消息傳遞系統(tǒng)咙俩,使我們能夠構(gòu)建分布式應(yīng)用程序耿戚。這是一個(gè)Apache頂級(jí)項(xiàng)目。Kafka適用于離線和在線的消息消費(fèi)阿趁。
Spring Boot + Apache Kafka示例
問(wèn):我們?nèi)绾伪O(jiān)視所有Spring Boot微服務(wù)?
答:Spring Boot提供了actuator 端點(diǎn)來(lái)監(jiān)控單個(gè)微服務(wù)的指標(biāo)膜蛔。這些端點(diǎn)對(duì)于獲取關(guān)于應(yīng)用程序的信息非常有幫助,比如應(yīng)用程序是否啟動(dòng)脖阵,它們的組件(如數(shù)據(jù)庫(kù)等)是否正常工作皂股。但是,使用actuator 接口的一個(gè)主要缺點(diǎn)或困難是命黔,我們必須逐個(gè)命中這些接口呜呐,以了解應(yīng)用程序的狀態(tài)或健康狀況。假設(shè)微服務(wù)涉及50個(gè)應(yīng)用程序悍募,管理員將不得不命中所有50個(gè)應(yīng)用程序的actuator 端點(diǎn)蘑辑。為了幫助我們處理這種情況,我們將使用位于https://github.com/codecentric/springing-boot-admin的開(kāi)源項(xiàng)目坠宴。
它構(gòu)建在Spring Boot Actuator之上洋魂,提供了一個(gè)web UI,使我們能夠可視化多個(gè)應(yīng)用程序的指標(biāo)。
Spring Boot Admin
問(wèn):您在Spring引導(dǎo)中使用過(guò)Spring Cloud組件嗎?
答:使用過(guò)Netflix Eureka等Spring Cloud組件進(jìn)行服務(wù)注冊(cè)忧设,Ribbon用于負(fù)載平衡刁标。
Spring Cloud interview Questions
問(wèn):如何將Spring Boot應(yīng)用程序部署到Pivotal Cloud Foundry(PCF)?
Deploying Spring Boot Application to PCF
問(wèn):如何將Spring Boot + MySQL應(yīng)用部署到Pivotal Cloud Foundry(PCF)?
A: Pivotal Cloud Foundry Tutorial - Deploying Spring Boot + MySQL Application to PCF
問(wèn):如何將Spring Boot + RabbitMQ應(yīng)用部署到Pivotal Cloud Foundry(PCF)?
A: Pivotal Cloud Foundry Tutorial - Deploying Spring Boot + RabbitMQ Application to PCF
歡迎大家加入粉絲群:963944895,群內(nèi)免費(fèi)分享Spring框架址晕、Mybatis框架SpringBoot框架膀懈、SpringMVC框架、SpringCloud微服務(wù)谨垃、Dubbo框架启搂、Redis緩存、RabbitMq消息刘陶、JVM調(diào)優(yōu)胳赌、Tomcat容器、MySQL數(shù)據(jù)庫(kù)教學(xué)視頻及架構(gòu)學(xué)習(xí)思維導(dǎo)圖
寫在最后:
既然看到這里了匙隔,覺(jué)得筆者寫的還不錯(cuò)的就點(diǎn)個(gè)贊疑苫,加個(gè)關(guān)注唄!點(diǎn)關(guān)注纷责,不迷路捍掺,持續(xù)更新!T偕拧挺勿!