版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章
認識微服務(wù)架構(gòu)《微服務(wù)架構(gòu)基礎(chǔ)(SpringBoot+SpringCloud+Docker)(第2版)》學(xué)習(xí)目標(biāo)/Target了解系統(tǒng)架構(gòu)的演變,能夠簡述單體應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、SOA的特點了解并能夠簡述微服務(wù)架構(gòu)的特點熟悉微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念,能夠簡述微服務(wù)架構(gòu)中的服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用、負載均衡、API網(wǎng)關(guān)、服務(wù)容錯和鏈路追蹤等概念了解微服務(wù)架構(gòu)的常見相關(guān)技術(shù),能夠簡述搭建微服務(wù)系統(tǒng)的常見技術(shù)章節(jié)概述/Summary隨著社會進步和科技發(fā)展,人們對應(yīng)用程序的需求不斷增加。面對日益復(fù)雜的業(yè)務(wù)需求,如何降低業(yè)務(wù)之間的耦合性、快速部署項目、輕松且持續(xù)改進項目是應(yīng)用程序急需解決的問題。為了解決這些問題,微服務(wù)架構(gòu)應(yīng)運而生,本章將引領(lǐng)讀者深入認識微服務(wù)架構(gòu)。目錄/Contents1.11.2系統(tǒng)架構(gòu)的演變微服務(wù)架構(gòu)的特點1.3服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念1.4微服務(wù)架構(gòu)的常見相關(guān)技術(shù)系統(tǒng)架構(gòu)的演變1.11.1系統(tǒng)架構(gòu)的演變先定一個小目標(biāo)!
先定一個小目標(biāo)!了解系統(tǒng)架構(gòu)的演變,能夠簡述單體應(yīng)用架構(gòu)、垂直應(yīng)用架構(gòu)、SOA的特點1.1系統(tǒng)架構(gòu)的演變系統(tǒng)架構(gòu)是指一個系統(tǒng)的組織結(jié)構(gòu)或設(shè)計,其定義了系統(tǒng)的組件、模塊、接口等,在系統(tǒng)中起到指導(dǎo)和約束的作用。隨著互聯(lián)網(wǎng)的飛速發(fā)展和技術(shù)的日益演進,系統(tǒng)架構(gòu)也在不斷演變。從最初的單體應(yīng)用架構(gòu),到如今廣受歡迎的微服務(wù)架構(gòu),系統(tǒng)架構(gòu)一直在探求創(chuàng)新,以提高系統(tǒng)的可擴展性、可維護性和可用性,以應(yīng)對業(yè)務(wù)需求和用戶體驗的不斷變化。下將對系統(tǒng)架構(gòu)的演變進行講解。1.1系統(tǒng)架構(gòu)的演變單體應(yīng)用架構(gòu)指的是將所有服務(wù)或者功能都封裝在一個應(yīng)用中的架構(gòu),即應(yīng)用程序所有業(yè)務(wù)場景的表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層都在一個工程中進行開發(fā)、部署和運行。在單體應(yīng)用架構(gòu)中,應(yīng)用程序的各個模塊通過方法調(diào)用或共享內(nèi)存等方式進行通信,通常共享相同的數(shù)據(jù)庫,應(yīng)用程序的邏輯和數(shù)據(jù)都集中在一起。單體應(yīng)用架構(gòu)1.1系統(tǒng)架構(gòu)的演變1.1系統(tǒng)架構(gòu)的演變優(yōu)點項目架構(gòu)簡單,技術(shù)結(jié)構(gòu)單一,周期短,前期用人成本低。缺點代碼可讀性、可維護性和可擴展性下降。系統(tǒng)性能擴展只能通過擴展集群結(jié)點。應(yīng)用中的任何一個bug都有可能導(dǎo)致整個系統(tǒng)宕機。1.1系統(tǒng)架構(gòu)的演變垂直應(yīng)用架構(gòu)是一種將應(yīng)用程序按照業(yè)務(wù)邏輯或模塊進行分解和設(shè)計的架構(gòu),它將單體應(yīng)用拆分成若干個獨立的小應(yīng)用,每個小應(yīng)用單獨部署到不同的服務(wù)器上,以提升效率。垂直應(yīng)用架構(gòu)1.1系統(tǒng)架構(gòu)的演變1.1系統(tǒng)架構(gòu)的演變優(yōu)點拆分成多個應(yīng)用,分別部署到不同的服務(wù)器,減輕服務(wù)器壓力。對獨立的Web應(yīng)用可以單獨進行優(yōu)化,方便水平擴展,提高容錯率。缺點系統(tǒng)之間相互獨立,無法直接進行相互調(diào)用。不同的系統(tǒng)可能存在重復(fù)的開發(fā)任務(wù),出現(xiàn)數(shù)據(jù)冗余、代碼冗余、功能冗余等問題。1.1系統(tǒng)架構(gòu)的演變SOA(Service-OrientedArchitecture,面向服務(wù)的體系結(jié)構(gòu))是一個組件模型,基于SOA可以將系統(tǒng)不同功能單元拆分成獨立的服務(wù),這些服務(wù)之間通過定義良好的接口和契約進行聯(lián)系,可以根據(jù)需求通過網(wǎng)絡(luò)對松散耦合的粗粒度應(yīng)用組件(服務(wù))進行分布式部署、組合和使用,從而更加靈活、高效地實現(xiàn)服務(wù)的設(shè)計、開發(fā)、部署和管理。SOA1.1系統(tǒng)架構(gòu)的演變1.1系統(tǒng)架構(gòu)的演變優(yōu)點基于SOA的應(yīng)用各個服務(wù)之間的耦合度較低,可讀性及可維護性比較好。缺點抽取服務(wù)的粒度較大,服務(wù)提供方與調(diào)用方接口耦合度較高,調(diào)用關(guān)系錯綜復(fù)雜。1.1系統(tǒng)架構(gòu)的演變微服務(wù)架構(gòu)是當(dāng)前較為流行的系統(tǒng)架構(gòu)之一,它提倡將一個大型、復(fù)雜的應(yīng)用系統(tǒng)拆分成多個獨立的小型服務(wù),每個服務(wù)都可以獨立構(gòu)建、部署、運行、擴展和維護。服務(wù)之間通過輕量級的通信機制協(xié)同工作,最終組成一個完整的應(yīng)用系統(tǒng)。微服務(wù)架構(gòu)在某種程度上是面向服務(wù)的架構(gòu)SOA繼續(xù)發(fā)展的下一步,微服務(wù)架構(gòu)更加強調(diào)服務(wù)的徹底拆分。微服務(wù)架構(gòu)1.1系統(tǒng)架構(gòu)的演變1.1系統(tǒng)架構(gòu)的演變優(yōu)點通過服務(wù)的原子化拆分,每個服務(wù)可以獨立打包、部署和升級,小團隊的交付周期將縮短,運維成本也將大幅度下降。缺點對技術(shù)成本高,需要解決系統(tǒng)的容錯、分布式事務(wù)等問題。如果微服務(wù)過多,會造成服務(wù)管理成本提高,不利于系統(tǒng)維護,服務(wù)拆分粒度過細也會導(dǎo)致系統(tǒng)變得凌亂。微服務(wù)架構(gòu)的特點1.21.2微服務(wù)架構(gòu)的特點先定一個小目標(biāo)!
先定一個小目標(biāo)!了解并能夠簡述微服務(wù)架構(gòu)的特點1.2微服務(wù)架構(gòu)的特點微服務(wù)架構(gòu)能夠成為目前主流的架構(gòu)之一,主要得益于它如下的特點。復(fù)雜度可控每個服務(wù)專注于特定的業(yè)務(wù)功能,每個服務(wù)的代碼庫更小,復(fù)雜度更低,更容易進行維護。便于部署和維護由于每個模塊只關(guān)注自身的功能,修改時只需要關(guān)注相關(guān)模塊。技術(shù)選型靈活允許開發(fā)人員根據(jù)項目業(yè)務(wù)需求和團隊特點,選擇不同的編程語言和工具進行開發(fā)和部署。易于擴展擴展新功能只需要新建一個對應(yīng)的獨立數(shù)據(jù)庫和新的模塊,不需要在現(xiàn)有模塊上進行修改。容錯性高故障會被隔離在單個服務(wù)中,其他服務(wù)可以繼續(xù)正常運行,不會受到故障的影響。微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念1.31.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念先定一個小目標(biāo)!
先定一個小目標(biāo)!熟悉微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念,能夠簡述微服務(wù)架構(gòu)中的服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用、負載均衡、API網(wǎng)關(guān)、服務(wù)容錯和鏈路追蹤等概念1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念微服務(wù)架構(gòu)的主要目的是實現(xiàn)服務(wù)的解耦。隨著系統(tǒng)業(yè)務(wù)的日趨復(fù)雜,使得服務(wù)之間的調(diào)用關(guān)系變得越來越復(fù)雜。同時,服務(wù)之間的遠程通信也會因為存在網(wǎng)絡(luò)通信問題而變得更加復(fù)雜。針對這種情況,需要在微服務(wù)架構(gòu)中進行服務(wù)治理,以簡化服務(wù)之間的通信關(guān)系,提高整體系統(tǒng)的可靠性和穩(wěn)定性。1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念服務(wù)注冊中心:微服務(wù)架構(gòu)中的一個獨立組件,它動態(tài)地維護著所有可用服務(wù)實例的地址、最新狀態(tài)等信息,并提供服務(wù)注冊、服務(wù)發(fā)現(xiàn)、健康檢查、負載均衡等功能。服務(wù)注冊:指服務(wù)將自身的關(guān)鍵信息(如服務(wù)名稱、地址、版本等)注冊到服務(wù)注冊中心,是微服務(wù)架構(gòu)中實現(xiàn)服務(wù)發(fā)現(xiàn)和服務(wù)之間通信的基礎(chǔ)。服務(wù)發(fā)現(xiàn):指服務(wù)實例在需要與其他服務(wù)通信時,通過服務(wù)注冊中心動態(tài)地找到對應(yīng)服務(wù)的信息,并通過這些信息請求所提供的服務(wù)。1.服務(wù)注冊與發(fā)現(xiàn)1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念目前主流的遠程調(diào)用技術(shù)包括基于HTTP的RESTful接口和基于TCP的RPC機制。REST(RepresentationalStateTransfer,表述性狀態(tài)轉(zhuǎn)移)是一種基于HTTP調(diào)用的標(biāo)準化格式,可以通過標(biāo)準的HTTP方法進行調(diào)用,有良好的查錯機制,尤其適合在跨域調(diào)用時使用。RESTful是指遵循REST風(fēng)格的Web服務(wù),可以使得客戶端和服務(wù)器之間的交互更加簡單、直觀。RPC(RemoteProcedureCalls,遠程過程調(diào)用)協(xié)議是一種進程間通信方式,可以讓遠程服務(wù)調(diào)用像調(diào)用本地服務(wù)一樣簡單和透明。2.服務(wù)調(diào)用1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念負載均衡是高可用網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的關(guān)鍵組件,通常用于將工作負載分配到多個服務(wù)器來提高網(wǎng)站、應(yīng)用、數(shù)據(jù)庫或其他服務(wù)的性能和可靠性。在微服務(wù)架構(gòu)中,因為服務(wù)之間的負載大小可能不同,如果不通過合理的分配負載到各個服務(wù)實例中,能導(dǎo)致某些服務(wù)實例過載而引發(fā)服務(wù)性能下降、錯誤率增加、連鎖故障等問題,甚至可能引起整個系統(tǒng)的崩潰。3.負載均衡1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念微服務(wù)架構(gòu)中不同的服務(wù)一般會有不同的網(wǎng)絡(luò)地址,隨著業(yè)務(wù)的新增,系統(tǒng)中的服務(wù)日趨增多,外部客戶端調(diào)用不同微服務(wù)的接口可能會面臨以下問題??蛻舳诵枰{(diào)用多個不同的網(wǎng)絡(luò)地址,增加難度。在某些場景下,可能存在跨域請求問題。每個微服務(wù)都需要單獨進行身份認證。4.API網(wǎng)關(guān)1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念A(yù)PI網(wǎng)關(guān)的基本功能包括統(tǒng)一接入、安全防護、協(xié)議適配、流量管控、長短鏈接支持和容錯能力等,它可以將所有API調(diào)用統(tǒng)一接入到API網(wǎng)關(guān)層,由API網(wǎng)關(guān)統(tǒng)一接入和輸出,各個API服務(wù)提供團隊就可以專注于自己的業(yè)務(wù)邏輯處理。4.API網(wǎng)關(guān)1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念在微服務(wù)架構(gòu)中,一個請求往往需要調(diào)用多個服務(wù),若其中的某個服務(wù)不可用,在沒有做服務(wù)容錯的情況下,有可能會導(dǎo)致一連串服務(wù)不可用,從而引發(fā)服務(wù)雪崩現(xiàn)象,而服務(wù)容錯就是確保系統(tǒng)在出現(xiàn)服務(wù)故障時,能夠具備自我修復(fù)和自我保護的能力??刹捎枚喾N技術(shù)手段,如重試機制、熔斷機制、限流機制、降級機制等來實現(xiàn)服務(wù)容錯,以確保系統(tǒng)具備高可用性和穩(wěn)定性。5.服務(wù)容錯1.3微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念在微服務(wù)架構(gòu)中,由于服務(wù)之間的相互調(diào)用和依賴關(guān)系十分復(fù)雜,一旦出現(xiàn)故障或異常,排查問題可能非常困難。通過鏈路追蹤,可以對服務(wù)調(diào)用鏈進行跟蹤和監(jiān)測,以快速定位和解決潛在的問題,提高服務(wù)的運行效率和可靠性。6.鏈路追蹤微服務(wù)架構(gòu)的常見相關(guān)技術(shù)1.41.4
微服務(wù)架構(gòu)的常見相關(guān)技術(shù)先定一個小目標(biāo)!
先定一個小目標(biāo)!了解微服務(wù)架構(gòu)的常見相關(guān)技術(shù),能夠簡述搭建微服務(wù)系統(tǒng)的常見技術(shù)1.4
微服務(wù)架構(gòu)的常見相關(guān)技術(shù)想要真正地搭建一個微服務(wù)架構(gòu)的項目,則需要采用具體的技術(shù)。隨著微服務(wù)逐漸的流行,很多公司相繼推出了微服務(wù)架構(gòu)的相關(guān)技術(shù),其中常見的技術(shù)如下。1.服務(wù)開發(fā)框架為了快速搭建微服務(wù)架構(gòu)的項目,可以使用服務(wù)開發(fā)框架,常見的服務(wù)開發(fā)框架有SpringBoot和Dropwizard等。2.服務(wù)注冊與發(fā)現(xiàn)為了實現(xiàn)服務(wù)之間的通信和發(fā)現(xiàn),可以使用服務(wù)注冊與發(fā)現(xiàn)機制。常見的服務(wù)注冊與發(fā)現(xiàn)技術(shù)包括SpringCloudEureka、Consul、SpringCloudAlibabaNacos等。3.負載均衡為了將負載均勻分配到多個服務(wù)實例,提高系統(tǒng)的穩(wěn)定性和可靠性,可以使用負載均衡技術(shù),常見的負載均衡技術(shù)有SpringCloudRibbon、SpringCloudLoadBalancer和Dubbo等。1.4
微服務(wù)架構(gòu)的常見相關(guān)技術(shù)4.服務(wù)容錯為了提高系統(tǒng)的可用性和容錯能力,可以使用服務(wù)容錯技術(shù),常見的服務(wù)容錯技術(shù)有Sentinel、Hystrix和Resilience4j等。5.API網(wǎng)關(guān)為了將所有服務(wù)接口進行統(tǒng)一管理,并實現(xiàn)統(tǒng)一的路由和訪問控制,可以使用API網(wǎng)關(guān),常見的API網(wǎng)關(guān)技術(shù)包括SpringCloudGateway、Kong等。6.分布式配置中心為了集中管理微服務(wù)架構(gòu)中的配置,減少配置修改的時間和風(fēng)險,可以是需要分布式配置中心,常見的分布式配置中心有SpringCloudConfig、Apollo和SpringCloudAlibabaNacos等。
1.4
微服務(wù)架構(gòu)的常見相關(guān)技術(shù)7.分布式鏈路追蹤為了準確追蹤微服務(wù)架構(gòu)中請求在多個微服務(wù)之間傳遞時的路由路徑、潛在的性能和耗時等問題,可以使用分布式鏈路追蹤技術(shù),常見的分布式鏈路追蹤技術(shù)有Zipkin、SkyWalking和SpringCloudSleuth等。8.分布式事務(wù)管理為了在分布式環(huán)境下解決數(shù)據(jù)一致性的問題,可以使用分布式事務(wù)管理,常見的分布式事務(wù)解決方案有Seata。9.部署在微服務(wù)的官方文檔中,推薦使用Docker來打包和部署微服務(wù)。Docker是一個開源的應(yīng)用容器引擎,它允許開發(fā)者將應(yīng)用及其依賴項打包成標(biāo)準化的可移植容器,然后發(fā)布到主流的操作系統(tǒng)中。1.4
微服務(wù)架構(gòu)的常見相關(guān)技術(shù)10.持續(xù)集成持續(xù)集成通過自動化構(gòu)建、測試和部署流程,確保每次代碼更改都能快速集成到主分支中,并及時進行驗證,減少了集成過程中可能出現(xiàn)的沖突和問題,提高了開發(fā)效率。Jenkins是一個當(dāng)前廣泛使用的持續(xù)集成工具,它為實現(xiàn)持續(xù)集成提供了強大的支持。本章小結(jié)本章主要介紹了微服務(wù)架構(gòu)。首先講解了系統(tǒng)架構(gòu)的演變;然后講解了微服務(wù)架構(gòu)的特點;接著講解了微服務(wù)架構(gòu)中與服務(wù)治理相關(guān)的常見概念;最后講解了微服務(wù)架構(gòu)的常見相關(guān)技術(shù)。通過本章的學(xué)習(xí),讀者可以對微服務(wù)架構(gòu)有初步認識,為后續(xù)學(xué)習(xí)微服務(wù)架構(gòu)奠定基礎(chǔ)。本章小結(jié)第2章SpringBoot開發(fā)入門《微服務(wù)架構(gòu)基礎(chǔ)(SpringBoot+SpringCloud+Docker)(第2版)》學(xué)習(xí)目標(biāo)/Target了解SpringBoot概述,能夠簡述SpringBoot誕生的背景了解并能夠簡述SpringBoot的特性熟悉SpringBoot原理,能夠簡述SpringBoot起步依賴、自動配置和執(zhí)行流程的原理學(xué)習(xí)目標(biāo)/Target掌握SpringBoot入門案例,能夠使用SpringInitializr方式和Maven方式構(gòu)建SpringBoot項目掌握在全局配置文件中配置數(shù)據(jù)的方法,能夠在perties配置文件和application.yml配置文件中正確配置數(shù)據(jù)掌握配置綁定方式,能夠通過@Value注解和@ConfigurationProperties注解綁定配置文件中的信息章節(jié)概述/SummarySpring框架中的IoC容器可以對組件進行管理,但是為了管理容器中的組件,使用Spring搭建JavaEE應(yīng)用程序時往往需要進行大量的配置或注解工作,這些工作都屬于項目的基礎(chǔ)搭建工作,通常與業(yè)務(wù)功能無關(guān),不熟悉搭建過程的人員在配置時很容易出錯。為了簡化Spring應(yīng)用的搭建和配置過程,SpringBoot應(yīng)運而生。SpringBoot是一個基于Spring的全新開源框架,它可以簡化Spring應(yīng)用的初始搭建和配置過程,使用更加簡單,功能更加豐富。本章將從SpringBoot開發(fā)入門入手,帶領(lǐng)大家正式進入SpringBoot框架的學(xué)習(xí)。目錄/Contents2.12.2SpringBoot概述SpringBoot入門案例2.3SpringBoot原理解析2.4SpringBoot配置SpringBoot概述2.12.1.1
SpringBoot簡介先定一個小目標(biāo)!
先定一個小目標(biāo)!了解SpringBoot概述,能夠簡述SpringBoot誕生的背景2.1.1
SpringBoot簡介在SpringBoot框架出現(xiàn)之前,JavaEE最常用的框架是Spring。Spring是輕量級的Java開源框架,旨在簡化Java企業(yè)級開發(fā)。Spring框架是輕量級的,但它的配置是重量級的。早期版本的Spring專注于XML配置,開發(fā)一個程序需要配置各種XML配置文件。在Spring中使用注解開發(fā)逐漸稱為了主流。SpringSpring4.x基本可以脫離XML配置文件進行項目開發(fā)。2.1.1
SpringBoot簡介Pivotal團隊在原有Spring框架的基礎(chǔ)上通過注解的方式進一步簡化了Spring框架的使用,并在2014年4月正式推出了基于Spring框架的全新框架—SpringBoot。2.1.1
SpringBoot簡介提升Spring開發(fā)者體驗的工具SpringBoot并不是替代Spring框架的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗的工具。構(gòu)建Spring項目SpringBoot框架本身并不提供Spring框架的核心特性以及擴展功能,它只是使構(gòu)建Spring應(yīng)用變得簡單。開箱即用SpringBoot集成了大量常用的第三方庫配置,使用SpringBoot開發(fā)程序時,幾乎是開箱即用。約定優(yōu)于配置開發(fā)過程中大量使用約定優(yōu)于配置的思想來擺脫Spring框架中各種復(fù)雜的手動配置。SpringBoot2.1.1
SpringBoot簡介隨著近幾年微服務(wù)開發(fā)的需求增長和火爆,如何快速、簡便地構(gòu)建一個準生產(chǎn)環(huán)境的Spring應(yīng)用成為擺在開發(fā)者面前的難題,SpringBoot框架的出現(xiàn)恰好完美解決了這些問題,同時內(nèi)部還簡化了許多常用的第三方庫配置,使微服務(wù)開發(fā)更加便利,這也間接體現(xiàn)了SpringBoot框架的優(yōu)勢和學(xué)習(xí)SpringBoot的必要性。2.1.2
SpringBoot的特性先定一個小目標(biāo)!
先定一個小目標(biāo)!了解并能夠簡述SpringBoot的特性2.1.2
SpringBoot的特性4.提供大量的自動化配置類。6.基本無須額外生成配置代碼和XML配置文件。5.提供生產(chǎn)就緒功能。1.可快速構(gòu)建獨立的Spring應(yīng)用。3.提供固化的“啟動器依賴,簡化構(gòu)建配置。2.內(nèi)嵌Tomcat、Jetty和Undertow等Web容器,無須將項目打包成WAR文件。SpringBoot的特性SpringBoot入門案例2.22.2.1環(huán)境搭建先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握SpringBoot入門案例環(huán)境準備,能夠獨立搭建SpringBoot入門案例所需要準備的環(huán)境2.2.1環(huán)境搭建本書所使用的SpringBoot版本為3.1.4。SpringBoot3.1.4依賴SpringFramework6.0.12,而運行SpringFramework6.0.12需要JDK17及以上版本進行支撐,本書選擇使用本書出版時使用較為廣泛并運行較為穩(wěn)定的JDK17。1.JDKSpringBoot3.1.4官方聲明支持的項目構(gòu)建工具包括Maven和Gradle,其中Maven的版本需要3.6.3及以上版本,Gradle的版本需要7.5及以上版本。本書將采用Maven3.6.3對SpringBoot進行項目構(gòu)建管理。2.項目構(gòu)建工具業(yè)界較為常用有Eclipse和IntelliJIDEA,相比Eclipse而言,IntelliJIDEA的開發(fā)效率更高。在此選擇IntelliJIDEAUltimate的2022.2.2版本進行項目開發(fā)。3.開發(fā)工具環(huán)境準備先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握SpringBoot入門案例,能夠使用SpringInitializr方式構(gòu)建SpringBoot項目2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目SpringInitializr是一個可以初始化SpringBoot項目的工具,使用SpringInitializr初始化的SpringBoot項目包含了SpringBoot基本的項目結(jié)構(gòu),可以項目初始化之前對項目所需要的依賴進行選擇。使用SpringInitializr方式構(gòu)建SpringBoot項目時,需要確保所在主機處于聯(lián)網(wǎng)狀態(tài)下,否則將構(gòu)建失敗。下面講解如何在IDEA中使用SpringInitializr方式構(gòu)建SpringBoot項目,并在項目中創(chuàng)建一個SpringMVC程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目啟動IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項目,在彈出的對話框中選擇左側(cè)“SpringInitializr”選項。ServerURL:初始化SpringBoot項目時SpringInitializr工具所在的服務(wù)器地址。Name:所創(chuàng)建項目的名稱。Location:所創(chuàng)建項目在本地存放的路徑。Language:所創(chuàng)建項目使用的開發(fā)語言。Type:所使用的項目構(gòu)建工具。Group:項目的組名。Artifact:項目的名稱。Packagename:包名。JDK:項目使用的JDK。Packaging:項目打包的方式。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目設(shè)置好項目的相應(yīng)信息,其中項目打包方式為Jar。單擊“Next”按鈕,進入SpringBoot場景依賴選擇界面。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目項目中想要添加SpringMVC,可以勾選Web類別下的SpringWeb,創(chuàng)建項目時就會添加SpringWeb的依賴。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目Chapter02Application.java:項目的啟動類,在該類中可以定義啟動項目的方法。static:靜態(tài)資源文件夾。templates:模板頁面文件夾。perties:全局配置文件。pom.xml:Maven工作的主要配置文件。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目Chapter02Application類有一個@SpringBootApplication注解,并且只有一個main()方法。其中,@SpringBootApplication注解用于標(biāo)注當(dāng)前類是SpringBoot的配置類,main()方法中調(diào)用SpringApplication類的run()方法來創(chuàng)建Spring容器,運行SpringBoot程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目2.編寫SpringMVC控制器在項目com.itheima.chapter02包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請求的方法index()。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目3.運行項目運行文件Chapter02Application.java,啟動程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項目3.運行項目在瀏覽器上訪問http://localhost:8080/first。2.2.3使用Maven方式構(gòu)建SpringBoot項目先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握SpringBoot入門案例,能夠使用Maven方式構(gòu)建SpringBoot項目2.2.3使用Maven方式構(gòu)建SpringBoot項目使用SpringInitializr方式構(gòu)建SpringBoot項目非常便捷,但是如果當(dāng)前主機不能聯(lián)網(wǎng)的話,就無法自動下載項目所需的一些依賴,從而導(dǎo)致這種方式無法正常使用。但是SpringBoot項目可以基于Maven構(gòu)建,如果構(gòu)建項目所需要使用的依賴在本地Maven倉庫中已經(jīng)存在,則無須聯(lián)網(wǎng)也可以構(gòu)建SpringBoot項目。下面講解如何在IDEA中使用Maven方式構(gòu)建SpringBoot項目,并在項目中創(chuàng)建一個SpringMVC程序。2.2.3使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目啟動IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項目,在彈出的對話框中選擇左側(cè)“MavenArchetype”選項。2.2.3使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目單擊“MavenArchetype”選項左側(cè)界面最上方的“NewProject”創(chuàng)建一個新的Mave項目。單擊后進入“NewProject”選項對應(yīng)的界面。2.2.3使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目設(shè)置好創(chuàng)建項目的信息后,單擊“Create”按鈕即可創(chuàng)建Maven項目。Maven項目創(chuàng)建好之后,會默認打開項目的pom.xml文件。2.2.3使用Maven方式構(gòu)建SpringBoot項目2.添加項目依賴創(chuàng)建一般的Maven項目時,需要手動在pom.xml文件中插入對應(yīng)的依賴信息。插入項目繼承的工程依賴,以及SpringWeb和測試相關(guān)的依賴。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version><relativePath/></parent>項目繼承的父依賴2.2.3使用Maven方式構(gòu)建SpringBoot項目2.添加項目依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>SpringWeb的依賴測試相關(guān)的依賴2.2.3使用Maven方式構(gòu)建SpringBoot項目默認情況下,IDEA會監(jiān)視項目中pom.xml文件的變化,在pom.xml文件中導(dǎo)入新依賴或更新原有依賴后,IDEA會通知Maven解析這些更改,并嘗試下載或更新對應(yīng)的依賴,但有些情況下,依賴可能無法自動下載或更新,這時候就需要手動觸發(fā)依賴的下載或更新,具體操作方法為:右鍵單擊項目名,選擇“Maven”→“Reloadproject”重新加載項目即可。小提示2.2.3使用Maven方式構(gòu)建SpringBoot項目3.編寫程序啟動類在java文件夾下創(chuàng)建一個名稱為com.itheima.chapter02maven的包,在該包下創(chuàng)建啟動類Chapter02MavenApplication。4.編寫SpringMVC控制器在項目com.itheima.chapter02maven包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請求的方法index()。2.2.3使用Maven方式構(gòu)建SpringBoot項目5.運行項目運行文件Chapter02MavenApplication.java,啟動程序,控制臺輸出的信息如下圖。2.2.3使用Maven方式構(gòu)建SpringBoot項目5.運行項目在瀏覽器中訪問http://localhost:8080/first。SpringBoot原理解析2.32.3
SpringBoot原理解析通過SpringBoot入門案例的實現(xiàn),相信大家能夠感受到,與使用Spring整合SpringMVC進行開發(fā)時需要設(shè)置煩瑣的依賴和配置信息相比,使用SpringBoot整合SpringMVC只需添加少量的依賴信息即可,開發(fā)過程也比較簡潔。SpringBoot項目中可以簡化依賴配置和常用工程的相關(guān)配置信息,這主要依靠它的起步依賴和自動配置。下面結(jié)合SpringBoot入門案例對SpringBoot的起步依賴、自動配置和執(zhí)行流程的原理進行分析和講解。2.3.1
起步依賴先定一個小目標(biāo)!
先定一個小目標(biāo)!熟悉SpringBoot起步依賴,能夠簡述SpringBoot起步依賴的原理2.3.1
起步依賴起步依賴本質(zhì)上是一個Maven項目對象模型,該模型中定義了對其它庫的傳遞依賴,SpringBoot提供了眾多起步依賴來降低項目依賴的復(fù)雜度。在SpringBoot入門案例中,項目的pom.xml文件中主要引入了兩個啟動器作為當(dāng)前項目的起步依賴,分別是spring-boot-starter-parent和spring-boot-starter-web。2.3.1
起步依賴1.spring-boot-starter-parent依賴spring-boot-starter-parent中定義了很多常見技術(shù)的版本信息,組合成一套最優(yōu)搭配的技術(shù)版本??梢栽贗DEA中按住Ctrl單擊spring-boot-starter-paren進入對應(yīng)的源碼文件中查看。2.spring-boot-starter-web依賴spring-boot-starter-web就是使用SpringMVC構(gòu)建Web應(yīng)用程序的啟動器。不僅包含SpringMVC的依賴信息和Spring整合SpringMVCWeb開發(fā)的依賴信息,還包含了其他的一些依賴信息。2.3.1
起步依賴SpringBoot官方提供了大量的啟動器,其基本都是通過“spring-boot-starter-技術(shù)名稱”格式命名,通過啟動器的名稱通??梢灾浪峁┑墓δ堋@?,spring-boot-starter-web表示它提供Web相關(guān)的功能,spring-boot-starter-jdbc表示它提供JDBC相關(guān)的功能。名稱描述spring-boot-starter-parent核心啟動器,提供了一組默認的配置,這些配置涵蓋了日志、YAML、Maven插件等多個方面,常被作為父依賴spring-boot-starter-logging提供Logging相關(guān)的日志功能spring-boot-starter-thymeleaf用于集成Thymeleaf模板引擎到SpringBoot應(yīng)用程序中spring-boot-starter-web提供了構(gòu)建Web應(yīng)用程序所需的依賴項和SpringMVC自動配置,使用Tomcat作為默認的嵌入式容器spring-boot-starter-test支持常規(guī)的測試依賴,包括Junit、Hamcrest、Mockito和spring-test模塊spring-boot-starter-jdbc結(jié)合JDBC和HikariCP連接池的啟動器,對數(shù)據(jù)源自動裝配,并提供JdbcTemplate簡化數(shù)據(jù)庫操作常見的SpringBoot應(yīng)用程序啟動器2.3.1
起步依賴名稱描述spring-boot-starter-data-jpa使用SpringDataJPA與Hibernate的啟動器spring-boot-starter-data-redis用于集成Redis的啟動器,可以自動引入Redis相關(guān)的依賴和配置,并提供與SpringBoot集成所需的自動化配置和功能spring-boot-starter-log4j2提供Log4j2相關(guān)的日志功能spring-boot-starter-activemq使用ApacheActiveMQ實現(xiàn)的Java消息服務(wù)啟動器spring-boot-starter-security使用SpringSecurity的啟動器spring-boot-starter-dubbo提供Dubbo框架的相關(guān)功能常見的SpringBoot應(yīng)用程序啟動器2.3.1
起步依賴SpringBoot官方并沒有為所有開發(fā)場景的技術(shù)框架都提供了啟動器,例如,數(shù)據(jù)庫操作框架MyBatis、阿里巴巴的Druid數(shù)據(jù)源等。為了充分利用SpringBoot框架的優(yōu)勢,一些第三方技術(shù)廠商主動與SpringBoot框架進行了整合,實現(xiàn)了各自的依賴啟動器,例如,MyBatis提供的啟動器mybatis-spring-boot-starter。不過在項目pom.xml文件中引入這些第三方的啟動器時,需要自行配置對應(yīng)的依賴版本號。2.3.1
起步依賴spring-boot-starter-parent和普通的starter都使SpringBoot項目簡化了配置,但是他們兩個的功能卻不相同。spring-boot-starter-parent:定義了很多個常見組件或框架的依賴版本號,組合成一套最優(yōu)搭配的技術(shù)版本,更便于統(tǒng)一管理依賴的版本,且減少了依賴的沖突。普通的starter:在坐標(biāo)中定了若干個坐標(biāo),減少依賴配置的代碼量。2.3.2
自動配置先定一個小目標(biāo)!
先定一個小目標(biāo)!熟悉SpringBoot自動配置,能夠簡述SpringBoot自動配置的原理2.3.2
自動配置SpringBoot采用約定優(yōu)于配置的設(shè)計思想,將SpringBoot開發(fā)過程中可能會遇到的配置信息提前配置好,并寫在自動配置的JAR包中。項目啟動時會自動檢測項目類路徑下所有的依賴JAR包,將檢測到的Bean注冊到Spring容器中,并根據(jù)檢測的依賴進行自動配置。2.3.2
自動配置@SpringBootConfiguration標(biāo)注當(dāng)前類是一個配置類,它是一個復(fù)合注解。1.@SpringBootConfiguration@EnableAutoConfiguration可以用于開啟SpringBoot的自動配置,它也是一個復(fù)合注解。2.@EnableAutoConfiguration@ComponentScan注解是一個組件掃描器,其主要作用是掃描指定包及其子包下所有注解類文件作為Spring容器的組件使用。3.@ComponentScan@SpringBootApplication注解2.3.2
自動配置1.
@SpringBootConfiguration查看@SpringBootConfiguration的源碼@SpringBootConfiguration是@Configuration的派生注解,擁有@Configuration注解的功能。@Configuration是@Component的派生注解,所以被@SpringBootApplication標(biāo)注的類可以被掃描到Spring的IoC容器中。2.3.2
自動配置2.@EnableAutoConfiguration@EnableAutoConfiguration主要通過代碼中的@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})實現(xiàn)自動配置。@AutoConfigurationPackage:主要作用是獲取項目啟動類所在根目錄,從而指定組件掃描器掃描的包位置。@Import({AutoConfigurationImportSelector.class}:導(dǎo)入AutoConfigurationImportSelector類,該類中提供了一個獲取自動配置的方法getAutoConfigurationEntry(),用于篩選出當(dāng)前項目環(huán)境需要啟動的自動配置類,從而實現(xiàn)當(dāng)前項目運行所需的自動配置環(huán)境。查看@EnableAutoConfiguration的源碼2.3.2
自動配置@AutoConfigurationPackage也是一個復(fù)合注解,其中@Import導(dǎo)入了AutoConfigurationPackages.Registrar類,Registrar類屬于AutoConfigurationPackages類中的靜態(tài)內(nèi)部類,該類中提供了批量注冊組件到Spring容器的方法。查看@AutoConfigurationPackage的源碼2.@EnableAutoConfiguration2.3.2
自動配置(1)從SpringBoot自動配置JAR包的META-INF/spring.factories和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中獲取所有候選自動配置類。(2)根據(jù)項目pom.xml文件中加入的依賴篩選出最終符合當(dāng)前項目運行環(huán)境對應(yīng)的自動配置類。查看@Import({AutoConfigurationImportSelector.class})的源碼2.@EnableAutoConfiguration2.3.2
自動配置3.
@ComponentScan@ComponentScan注解具體掃描的包的根路徑由SpringBoot項目主程序啟動類所在包位置決定,在掃描過程中由前面介紹的@AutoConfigurationPackage注解進行解析,從而得到SpringBoot項目主程序啟動類所在包的具體位置。@ComponentScan(excludeFilters={@Filter(type=FilterType.CUSTOM,classes={TypeExcludeFilter.class}),@Filter(type=FilterType.CUSTOM,classes={AutoConfigurationExcludeFilter.class})})指定掃描時過濾掉不加載到Spring容器的類。在BeanFactory中查找所有類型為TypeExcludeFilter的組件,并去執(zhí)行其自定義的過濾方法。用于過濾其他同時使用@Configuration和@EnableAutoConfigure的類。2.3.3
執(zhí)行流程先定一個小目標(biāo)!
先定一個小目標(biāo)!熟悉SpringBoot執(zhí)行流程,能夠基于SpringBoot入門案例簡述SpringBoot的執(zhí)行流程2.3.3
執(zhí)行流程SpringBoot入門案例啟動類的main()方法中只有一行代碼,使用SpringApplication類調(diào)用run()方法,執(zhí)行該行代碼,就啟動了整個SpringBoot項目。為了進一步了解SpringBoot的啟動原理,下面基于SpringBoot入門案例講解SpringBoot的執(zhí)行流程。2.3.3
執(zhí)行流程查看SpringApplication調(diào)用的run()方法的源碼SpringApplication的run()方法中調(diào)用了另一個重載的run()方法,被調(diào)用的重載run()方法內(nèi)部執(zhí)行了兩個操作,分別是創(chuàng)建SpringApplication實例和調(diào)用run()方法。2.3.3
執(zhí)行流程創(chuàng)建SpringApplication實例主要執(zhí)行了如下操作。①
初始化資源加載器,此處將資源加載器置空。②初始化加載資源的類。③推斷當(dāng)前啟動的項目的類型。④設(shè)置應(yīng)用程序的上下文初始化器。⑤設(shè)置應(yīng)用程序的事件監(jiān)聽器。⑥設(shè)置項目的主程序啟動類。1.創(chuàng)建SpringApplication實例2.3.3
執(zhí)行流程run()方法的核心代碼執(zhí)行內(nèi)容。(1)創(chuàng)建啟動上下文對象。(2)獲取并啟動運行監(jiān)聽器。(3)將應(yīng)用程序參數(shù)封裝為ApplicationArguments類型對象。(4)配置環(huán)境信息ConfigurableEnvironment的基礎(chǔ)的配置信息。(5)配置需要忽略的Bean信息。(6)創(chuàng)建應(yīng)用程序上下文對象,并設(shè)置上下文對象的應(yīng)用程序啟動器。(7)對應(yīng)用上下文環(huán)境進行準備。(8)刷新應(yīng)用程序上下文,初始化IoC容器里面的Bean。(9)調(diào)用了監(jiān)聽器的started()方法,通知監(jiān)聽器上下文啟動完成。2.調(diào)用run()方法查看run()方法執(zhí)行的過程SpringBoot配置2.42.4SpringBoot配置SpringBoot提供了眾多默認配置,這極大提高了應(yīng)用程序的開發(fā)效率。SpringBoot啟動時會自動讀取應(yīng)用程序中全局配置文件的配置,開發(fā)者想要根據(jù)自身需求覆蓋SpringBoot的默認配置,可以通過修改全局配置文件實現(xiàn),并通過配置綁定將配置文件中的值與Bean中的屬性進行綁定,使這些配置信息可以在應(yīng)用程序中使用。下面對SpringBoot配置中的全局配置文件和配置綁定進行講解。2.4.1全局配置文件先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握在全局配置文件中配置數(shù)據(jù),能夠在perties配置文件和application.yml配置文件中正確配置數(shù)據(jù)2.4.1全局配置文件SpringBoot默認使用的全局配置文件有perties、application.yml和application.yaml,其中,application.yml與application.yaml文件類型相同,只是為了滿足不同操作系統(tǒng)對文件命名的要求而使用了不同的擴展名。下面對SpringBoot配置中的全局配置文件進行講解。2.4.1全局配置文件1.perties配置文件perties文件中可以定義SpringBoot項目的相關(guān)屬性,屬性可采用鍵值對格式進行設(shè)置,表示形式為“Key=Value”,這些相關(guān)屬性可以是系統(tǒng)屬性、環(huán)境變量、命令參數(shù)等信息,也可以是自定義的屬性。address=beijingserver.port=80spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverperties文件中的屬性支持多種類型,常見的有字面量、數(shù)組和集合。2.4.1全局配置文件(1)字面量類型屬性字面量是指單個的不可拆分的值,例如:數(shù)字、字符串、布爾值等。在perties文件中配置字面量的屬性時,直接將字面量作為Value寫在鍵值對中即可,且默認情況下字符串是不需要使用單引號或雙引號進行修飾的。address=beijingage=132.4.1全局配置文件如果需要配置的屬性為對象的屬性,可以通過“對象名.屬性名”的方式指定屬性的鍵。對象中可能包含多個屬性,在perties文件中為對象的屬性賦值時,一個屬性對應(yīng)一對鍵值對。user.username=lisiuser.age=18(1)字面量類型屬性2.4.1全局配置文件(2)數(shù)組類型屬性在perties文件中配置數(shù)組類型屬性時,可以將數(shù)組元素的值寫在一行內(nèi),元素值之間使用逗號(,)間隔,也可以在多行分別根據(jù)索引賦值。#方式一user.hobby=swim,travel,cook#方式二user.hobby[0]=swim2user.hobby[1]=travel2user.hobby[2]=cook22.4.1全局配置文件(3)集合類型屬性在perties文件中也可以配置集合類型的屬性,下面分別演示配置List、Set、Map的集合類型屬性。#配置List集合類型屬性(方式一)user.subject=Chinese,English,Math#配置List集合類型屬性(方式二)user.subject[0]=Chineseuser.subject[1]=Englishuser.subject[2]=Math2.4.1全局配置文件(3)集合類型屬性#配置Set集合類型屬性user.salary=120,230#配置Map集合類型屬性(方式一)user.order.1001=cookieuser.order.1002=cake#配置Map集合類型屬性(方式二)user.order[1001]=cookieuser.order[1002]=cake2.4.1全局配置文件2.application.yml配置文件application.yml配置文件是YAML編寫的文件,YAML是”YAMLAin'tMarkupLanguage“的遞歸縮寫。YAML文件通常用于表示數(shù)據(jù)結(jié)構(gòu)和配置信息,它使用縮進的方式表示層級關(guān)系,使得配置文件和數(shù)據(jù)結(jié)構(gòu)的表達相對簡潔和易于閱讀。YAML支持的數(shù)據(jù)包括列表、鍵值對和字符串、數(shù)字等。YAML文件的擴展名為.yml或.yaml,編寫時需要遵循如下規(guī)則。使用縮進表示層級關(guān)系。
縮進時不允許使用Tab鍵,只允許使用空格??s進的空格數(shù)不重要,但同級元素必須左側(cè)對齊。對字母大小寫敏感。2.4.1全局配置文件在YAML文件中使用“Key:Value”的形式表示一對鍵值對,其中,Value前面有一個空格,并且該空格不能省略。在配置字面量類型屬性時,直接將字面量作為Value寫在鍵值對中即可,且默認情況下字符串是不需要使用單引號或雙引號進行修飾的。address:beijingage:13(1)字面量類型屬性2.4.1全局配置文件如果需要配置的屬性為對象的屬性,配置的方式有縮進式和行內(nèi)式兩種。#縮進式consumer:username:lisiage:18#行內(nèi)式consumer:{username:lisi,age:18}(1)字面量類型屬性2.4.1全局配置文件(2)數(shù)組類型和單列集合屬性當(dāng)YAML配置文件中配置的屬性為數(shù)組類型或單列集合時,也可以使用縮進式寫法和行內(nèi)式寫法。consumer:hobby:-play-readconsumer:hobby:[play,read]or縮進式行內(nèi)式2.4.1全局配置文件(3)Map集合屬性當(dāng)YAML配置文件中配置的屬性為Map集合時,可以使用縮進式寫法和行內(nèi)式寫法。consumer:order:1001:cookie1002:cakeconsumer:order:{1001:cookie,1002:cake}or縮進式行內(nèi)式多學(xué)一招默認配置文件SpringBoot項目將perties或application.yml作為項目的默認配置文件。SpringBoot項目中可以存在多個perties或application.yml,SpringBoot啟動時會掃描以下5個位置的perties和application.yml文件,并將掃描到的文件作為SpringBoot的默認配置文件。
file:./config/*/
file:./config/file:./classpath:/config/
classpath:/多學(xué)一招默認配置文件SpringBoot項目將perties或application.yml作為項目的默認配置文件。Spring上述5個位置下如果存在perties和application.yml文件,在項目啟動就都會被加載。加載多個perties或application.yml文件時,文件中的配置會根據(jù)文件所處的位置劃分優(yōu)先級,優(yōu)先級規(guī)則如下。上述位置1~位置5的優(yōu)先級依次降低,序號越小優(yōu)先級越高。位于相同位置的perties的優(yōu)先級高于application.yml,application.yml的優(yōu)先級高于application.yaml。存在相同的配置內(nèi)容時,高優(yōu)先級的內(nèi)容會覆蓋低優(yōu)先級的內(nèi)容。存在不同的配置內(nèi)容時,高優(yōu)先級和低優(yōu)先級的配置內(nèi)容取并集。2.4.2配置綁定先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握配置綁定方式,能夠通過@Value注解和@ConfigurationProperties注解綁定配置文件中的信息2.4.2配置綁定在使用SpringBoot全局配置文件配置屬性時,如果配置的屬性是SpringBoot內(nèi)置的屬性(如服務(wù)端口server.port),那么SpringBoot會自動掃描并讀取配置文件中的屬性值并覆蓋原有的默認屬性值。如果配置的屬性是用戶自定義的屬性,那么可以通過Java代碼去讀取該配置屬性,并且把屬性值綁定到Bean。在SpringBoot項目中可以通過@Value和@ConfigurationProperties注解綁定配置文件中的信息,下面分別對這兩種配置綁定進行講解。2.4.2配置綁定1.@Value注解@Value注解是由Spring框架提供的,SpringBoot框架從Spring框架中對@Value注解進行了默認繼承,通過@Value可以將配置文件中的屬性值綁定到Bean對象對應(yīng)的屬性。@ComponentpublicclassPerson{@Value("${person.id}")privateintid;}將配置文件中屬性person.id的值動態(tài)注入到id屬性2.4.2配置綁定下面通過案例演示在SpringBoot項目中使用@Value綁定全局配置文件中的屬性。(1)設(shè)置配置信息。在項目的resource文件夾下創(chuàng)建配置文件application.yml,在該配置文件中添加屬性信息。consumer:username:lisiage:23hobby:sing,readsubject:100,1502.4.2配置綁定(2)創(chuàng)建實體類。在chapter02-maven項目的java文件夾下創(chuàng)建類包com.itheima.chapter02maven.domain,并在該類包下創(chuàng)建一個消費者實體類Consumer,在該類上使用@Component進行標(biāo)注,并在屬性上使用@Value注解注入配置文件中對應(yīng)屬性的值。(3)創(chuàng)建測試類。在項目test\java目錄下,創(chuàng)建包com.itheima.chapter02maven,在該包下創(chuàng)建測試類Chapter02MavenApplicationTests,在該測試類中注入Consumer對象,并新增一個測試方法進行輸出測試。2.4.2配置綁定(4)測試程序效果。運行測試方法wiredTest()。2.4.2配置綁定2.@ConfigurationProperties注解Java是面向?qū)ο蟮恼Z言,很多情況下,人們習(xí)慣將具有相同特性的一組數(shù)據(jù)封裝到一個對象中,SpringBoot中就提供了具有這種功能的注解。SpringBoot的@ConfigurationProperties注解可以
可以將配置文件中的一組配置數(shù)據(jù)同時綁定到Bean中。下面通過案例演示在SpringBoot項目中使用@ConfigurationProperties注解綁定全局配置文件中的數(shù)據(jù)。2.4.2配置綁定(1)修改實體類屬性的綁定方式。在Consumer類上使用@ConfigurationProperties注解進行標(biāo)注,并且去除屬性上方標(biāo)注的@Value注解。@Component@ConfigurationProperties(prefix="consumer")publicclassConsumer{privateStringusername;privateintage;privateString[]hobby;privateListsubject;//……setter/getter方法,以及toString()方法}類中的屬性名需要和綁定的配置文件中屬性名保持一致。2.4.2配置綁定(2)新增測試方法。在文件2-3的Chapter02ApplicationTests類中,新增測試方法confTest(),在測試方法中輸出Consumer對象。@TestvoidconfTest(){System.out.println(consumer);}2.4.2配置綁定(3)測試程序效果。運行測試方法confTest()。本章小結(jié)本章主要對SpringBoot開發(fā)入門知識進行了講解。首先是SpringBoot概述,然后講解了SpringBoot入門案例,接著結(jié)合入門案例對SpringBoot原理進行了解析,最后講解了SpringBoot配置。通過本章的學(xué)習(xí),希望大家可以對SpringBoot有初步認識,為后續(xù)更深入學(xué)習(xí)SpringBoot奠定基礎(chǔ)。本章小結(jié)第3章SpringBoot應(yīng)用進階《微服務(wù)架構(gòu)基礎(chǔ)(SpringBoot+SpringCloud+Docker)(第2版)》學(xué)習(xí)目標(biāo)/Target了解SpringMVC自動配置,能夠簡述SpringBoot整合SpringMVC提供的主要自動配置功能了解MyBatis-Plus概述,能夠簡述MyBatis-Plus的特性和框架結(jié)構(gòu)熟悉MyBatis-Plus的基本功能,能夠說出MyBatis-Plus中BaseMapper和IService的常用增刪改查方法熟悉SpringSecurity的認證和授權(quán)管理,能夠簡述SpringSecurity的認證和授權(quán)管理的方式掌握自定義SpringMVC配置的方法,能夠在SpringMVC中配置靜態(tài)資源映射、視圖控制器、攔截器學(xué)習(xí)目標(biāo)/Target掌握SpringBoot整合MyBatis-Plus入門案例,能夠獨立將SpringBoot和MyBatis-Plus進行整合熟悉SpringDataRedis入門的內(nèi)容,能夠簡述SpringDataRedis的定義,以及SpringDataRedis的常見操作掌握SpringBoot整合SpringDataRedis入門案例的內(nèi)容,能夠獨立將SpringBoot和SpringDataRedis進行整合掌握SpringBoot整合SpringSecurity入門案例的內(nèi)容,能夠獨立將SpringBoot和SpringSecurity進行整合,實現(xiàn)用戶認證和授權(quán)的應(yīng)用章節(jié)概述/SummarySpringBoot框架可用于快速搭建和開發(fā)企業(yè)級Java應(yīng)用,在開發(fā)者社區(qū)中越來越受歡迎。然而,只掌握SpringBoot的基礎(chǔ)知識并不能很好地滿足復(fù)雜和龐大應(yīng)用的需求。隨著應(yīng)用變得越來越復(fù)雜,開發(fā)者需要掌握SpringBoot的高級技術(shù)來應(yīng)對挑戰(zhàn)。SpringBoot的核心優(yōu)勢在于其自動配置和快速集成功能,本章將通過講解SpringBoot整合SpringMVC、MyBatis-Plus、Redis和SpringSecurity,幫助讀者深入學(xué)習(xí)SpringBoot的進階應(yīng)用,并掌握更多實用技巧和最佳實踐,以構(gòu)建可靠、高效和安全的應(yīng)用程序。目錄/Contents3.13.2SpringBoot整合SpringMVCSpringBoot整合MyBatis-Plus3.3SpringBoot集成Redis3.4SpringBoot整合SpringSecuritySpringBoot整合SpringMVC3.13.1
SpringBoot整合SpringMVC在大多數(shù)SpringBoot應(yīng)用中,前端MVC框架仍使用SpringMVC,SpringBoot提供的spring-boot-starter-web啟動器中嵌入了SpringMVC相關(guān)的依賴,為開發(fā)者提供了大量的自動配置,適用于大多數(shù)Web開發(fā)場景。除了可以使用這些自動配置功能之外,開發(fā)者還可以自定義SpringMVC配置,以更靈活地滿足不同的需求。下面分別對SpringMVC自動配置和自定義SpringMVC配置進行講解。3.1.1
SpringMVC自動配置先定一個小目標(biāo)!
先定一個小目標(biāo)!了解SpringMVC自動配置,能夠簡述SpringBoot整合SpringMVC提供的主要自動配置功能3.1.1
SpringMVC自動配置SpringBoot整合SpringMVC提供的自動配置功能主要如下所示。1.簡化配置SpringBoot通過約定優(yōu)于配置的理念,減少了煩瑣的配置步驟。開發(fā)者只需在項目中引入相應(yīng)的依賴,無須手動配置其他額外的信息,即可快速構(gòu)建完善的SpringMVC應(yīng)用。2.提供默認映射路徑SpringBoot自動注冊了DispatcherServlet,并將默認映射路徑設(shè)置為“/”,無須手動指定DispatcherServlet和URL映射規(guī)則,簡化了URL配置的過程。3.自動處理靜態(tài)資源SpringBoot提供了自動處理靜態(tài)資源的功能,只需將靜態(tài)資源文件(如CSS、JavaScript、圖片等)放置在特定的目錄下,SpringBoot會自動處理靜態(tài)資源的訪問,無須額外的配置。3.1.1
SpringMVC自動配置4.自動包掃描SpringBoot自動掃描項目中的各個組件,并將它們自動注冊到SpringMVC中,而無須開發(fā)者手動進行組件掃描和注冊的操作。5.自動配置視圖技術(shù)SpringBoot支持多種視圖技術(shù),如Thymeleaf、FreeMarker等,開發(fā)者只需添加相應(yīng)的依賴,即可自動配置并使用這些視圖技術(shù),無須額外的配置。6.自動異常處理SpringBoot提供了默認的異常處理器,自動處理請求過程中產(chǎn)生的常見異常,提高系統(tǒng)的可靠性和容錯性。7.RESTfulAPI支持SpringBoot對RESTfulAPI的支持非常友好,它可以自動處理序列化和反序列化JSON,可以輕松實現(xiàn)基于REST的接口開發(fā)。3.1.2
自定義SpringMVC配置先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握自定義SpringMVC配置的方法,能夠在SpringMVC中配置靜態(tài)資源映射、視圖控制器、攔截器3.1.2自定義SpringMVC配置在SpringBoot應(yīng)用中使用SpringMVC時,如果希望在為SpringMVC自動配置提供相關(guān)特性的同時,增加一些自定義的SpringMVC配置,例如添加攔截器、視圖控制器等,可以通過自定義WebMvcConfigurer類型的配置類來實現(xiàn)。下面分別對SpringMVC中的配置靜態(tài)資源映射、視圖控制器、攔截器的方式進行講解。3.1.2自定義SpringMVC配置1.配置靜態(tài)資源映射通常Web應(yīng)用中會需要使用靜態(tài)資源,例如,JavaScript文件、CSS文件和HTML文件等。單獨使用SpringMVC時,導(dǎo)入靜態(tài)資源文件后,需要配置靜態(tài)資源的映射,否則無法正常訪問。SpringBoot中提供了默認的靜態(tài)資源映射,當(dāng)訪問項目中任意的靜態(tài)資源時,SpringBoot會默認從以下路徑中進行查找。(1)classpath:/META-INF/resources/(2)classpath:/resources/(3)classpath:/static/(4)classpath:/public/優(yōu)先級從(1)至(4)依次遞減,SpringBoot會先查找優(yōu)先級高的文件夾,再查找優(yōu)先級低的文件夾。3.1.2自定義SpringMVC配置下面演示直接訪問靜態(tài)資源文件夾和非靜態(tài)資源文件夾中資源的效果,首先創(chuàng)建一個名稱為chapter03-springmvc的SpringBoot項目,在項目的pom.xml文件夾中引入spring-boot-starter-web啟動器。然后在項目的src/main/resources目錄下創(chuàng)建文件夾static,接著在
src/main/resources/static和
src/main/resources目錄下分別創(chuàng)建main.html文件和index.html文件,并在項目啟動后分別在瀏覽器中對這兩個靜態(tài)資源進行訪問,訪問結(jié)果如下圖所示。3.1.2自定義SpringMVC配置如果想在項目中訪問非默認靜態(tài)資源文件夾下的資源,可以自定義靜態(tài)資源的映射。自定義靜態(tài)資源的映射可以通過配置類和配置文件2種方式實現(xiàn)。(1)通過配置類實現(xiàn)靜態(tài)資源映射通過配置類實現(xiàn)靜態(tài)資源映射時,配置類需要實現(xiàn)WebMvcConfigurer接口,在重寫WebMvcConfigurer接口的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 區(qū)域衛(wèi)生一體化管理制度
- 醫(yī)保衛(wèi)生室監(jiān)管制度
- 鄉(xiāng)村衛(wèi)生站診所管理制度
- 衛(wèi)生院安全保障制度
- 衛(wèi)生區(qū)域責(zé)任人管理制度
- 幼兒園教職工衛(wèi)生間制度
- 輸煤衛(wèi)生管理制度及流程
- 基層衛(wèi)生院晉升制度
- 衛(wèi)生院辦公用房制度
- 控制室衛(wèi)生管理制度
- TCTA 011-2026 智能水尺觀測系統(tǒng)操作規(guī)程
- 2025年6月江蘇揚州經(jīng)濟技術(shù)開發(fā)區(qū)區(qū)屬國有企業(yè)招聘23人筆試參考題庫附帶答案詳解(3卷)
- 四川省2025年高職單招職業(yè)技能綜合測試(中職類) 護理類試卷(含答案解析)
- 2025至2030全球及中國變壓器監(jiān)測行業(yè)調(diào)研及市場前景預(yù)測評估報告
- 2025年世界職業(yè)院校技能大賽中職組“護理技能”賽項考試題庫(含答案)
- T∕HAICWM 008-2025 安化黃精標(biāo)準體系
- 2025機械行業(yè)研究:可控核聚變專題:“十五五”資本開支加速“人造太陽”漸行漸近
- ECMO治療期間酸堿失衡糾正方案
- 安全運營部工作職責(zé)
- 機房應(yīng)急停電處理標(biāo)準流程
- 電力設(shè)備檢測方案
評論
0/150
提交評論