微服基礎(chǔ)架構(gòu) 3_第1頁(yè)
微服基礎(chǔ)架構(gòu) 3_第2頁(yè)
微服基礎(chǔ)架構(gòu) 3_第3頁(yè)
微服基礎(chǔ)架構(gòu) 3_第4頁(yè)
微服基礎(chǔ)架構(gòu) 3_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章SpringBoot開發(fā)入門《微服務(wù)架構(gòu)基礎(chǔ)(SpringBoot+SpringCloud+Docker)(第2版)》學(xué)習(xí)目標(biāo)/Target了解SpringBoot概述,能夠簡(jiǎn)述SpringBoot誕生的背景了解并能夠簡(jiǎn)述SpringBoot的特性熟悉SpringBoot原理,能夠簡(jiǎn)述SpringBoot起步依賴、自動(dòng)配置和執(zhí)行流程的原理學(xué)習(xí)目標(biāo)/Target掌握SpringBoot入門案例,能夠使用SpringInitializr方式和Maven方式構(gòu)建SpringBoot項(xiàng)目掌握在全局配置文件中配置數(shù)據(jù)的方法,能夠在perties配置文件和application.yml配置文件中正確配置數(shù)據(jù)掌握配置綁定方式,能夠通過@Value注解和@ConfigurationProperties注解綁定配置文件中的信息章節(jié)概述/SummarySpring框架中的IoC容器可以對(duì)組件進(jìn)行管理,但是為了管理容器中的組件,使用Spring搭建JavaEE應(yīng)用程序時(shí)往往需要進(jìn)行大量的配置或注解工作,這些工作都屬于項(xiàng)目的基礎(chǔ)搭建工作,通常與業(yè)務(wù)功能無關(guān),不熟悉搭建過程的人員在配置時(shí)很容易出錯(cuò)。為了簡(jiǎn)化Spring應(yīng)用的搭建和配置過程,SpringBoot應(yīng)運(yùn)而生。SpringBoot是一個(gè)基于Spring的全新開源框架,它可以簡(jiǎn)化Spring應(yīng)用的初始搭建和配置過程,使用更加簡(jiǎn)單,功能更加豐富。本章將從SpringBoot開發(fā)入門入手,帶領(lǐng)大家正式進(jìn)入SpringBoot框架的學(xué)習(xí)。目錄/Contents2.12.2SpringBoot概述SpringBoot入門案例2.3SpringBoot原理解析2.4SpringBoot配置SpringBoot概述2.12.1.1

SpringBoot簡(jiǎn)介先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解SpringBoot概述,能夠簡(jiǎn)述SpringBoot誕生的背景2.1.1

SpringBoot簡(jiǎn)介在SpringBoot框架出現(xiàn)之前,JavaEE最常用的框架是Spring。Spring是輕量級(jí)的Java開源框架,旨在簡(jiǎn)化Java企業(yè)級(jí)開發(fā)。Spring框架是輕量級(jí)的,但它的配置是重量級(jí)的。早期版本的Spring專注于XML配置,開發(fā)一個(gè)程序需要配置各種XML配置文件。在Spring中使用注解開發(fā)逐漸稱為了主流。SpringSpring4.x基本可以脫離XML配置文件進(jìn)行項(xiàng)目開發(fā)。2.1.1

SpringBoot簡(jiǎn)介Pivotal團(tuán)隊(duì)在原有Spring框架的基礎(chǔ)上通過注解的方式進(jìn)一步簡(jiǎn)化了Spring框架的使用,并在2014年4月正式推出了基于Spring框架的全新框架—SpringBoot。2.1.1

SpringBoot簡(jiǎn)介提升Spring開發(fā)者體驗(yàn)的工具SpringBoot并不是替代Spring框架的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗(yàn)的工具。構(gòu)建Spring項(xiàng)目SpringBoot框架本身并不提供Spring框架的核心特性以及擴(kuò)展功能,它只是使構(gòu)建Spring應(yīng)用變得簡(jiǎn)單。開箱即用SpringBoot集成了大量常用的第三方庫(kù)配置,使用SpringBoot開發(fā)程序時(shí),幾乎是開箱即用。約定優(yōu)于配置開發(fā)過程中大量使用約定優(yōu)于配置的思想來擺脫Spring框架中各種復(fù)雜的手動(dòng)配置。SpringBoot2.1.1

SpringBoot簡(jiǎn)介隨著近幾年微服務(wù)開發(fā)的需求增長(zhǎng)和火爆,如何快速、簡(jiǎn)便地構(gòu)建一個(gè)準(zhǔn)生產(chǎn)環(huán)境的Spring應(yīng)用成為擺在開發(fā)者面前的難題,SpringBoot框架的出現(xiàn)恰好完美解決了這些問題,同時(shí)內(nèi)部還簡(jiǎn)化了許多常用的第三方庫(kù)配置,使微服務(wù)開發(fā)更加便利,這也間接體現(xiàn)了SpringBoot框架的優(yōu)勢(shì)和學(xué)習(xí)SpringBoot的必要性。2.1.2

SpringBoot的特性先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解并能夠簡(jiǎn)述SpringBoot的特性2.1.2

SpringBoot的特性4.提供大量的自動(dòng)化配置類。6.基本無須額外生成配置代碼和XML配置文件。5.提供生產(chǎn)就緒功能。1.可快速構(gòu)建獨(dú)立的Spring應(yīng)用。3.提供固化的“啟動(dòng)器依賴,簡(jiǎn)化構(gòu)建配置。2.內(nèi)嵌Tomcat、Jetty和Undertow等Web容器,無須將項(xiàng)目打包成WAR文件。SpringBoot的特性SpringBoot入門案例2.22.2.1環(huán)境搭建先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握SpringBoot入門案例環(huán)境準(zhǔn)備,能夠獨(dú)立搭建SpringBoot入門案例所需要準(zhǔn)備的環(huán)境2.2.1環(huán)境搭建本書所使用的SpringBoot版本為3.1.4。SpringBoot3.1.4依賴SpringFramework6.0.12,而運(yùn)行SpringFramework6.0.12需要JDK17及以上版本進(jìn)行支撐,本書選擇使用本書出版時(shí)使用較為廣泛并運(yùn)行較為穩(wěn)定的JDK17。1.JDKSpringBoot3.1.4官方聲明支持的項(xiàng)目構(gòu)建工具包括Maven和Gradle,其中Maven的版本需要3.6.3及以上版本,Gradle的版本需要7.5及以上版本。本書將采用Maven3.6.3對(duì)SpringBoot進(jìn)行項(xiàng)目構(gòu)建管理。2.項(xiàng)目構(gòu)建工具業(yè)界較為常用有Eclipse和IntelliJIDEA,相比Eclipse而言,IntelliJIDEA的開發(fā)效率更高。在此選擇IntelliJIDEAUltimate的2022.2.2版本進(jìn)行項(xiàng)目開發(fā)。3.開發(fā)工具環(huán)境準(zhǔn)備先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握SpringBoot入門案例,能夠使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目SpringInitializr是一個(gè)可以初始化SpringBoot項(xiàng)目的工具,使用SpringInitializr初始化的SpringBoot項(xiàng)目包含了SpringBoot基本的項(xiàng)目結(jié)構(gòu),可以項(xiàng)目初始化之前對(duì)項(xiàng)目所需要的依賴進(jìn)行選擇。使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目時(shí),需要確保所在主機(jī)處于聯(lián)網(wǎng)狀態(tài)下,否則將構(gòu)建失敗。下面講解如何在IDEA中使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目,并在項(xiàng)目中創(chuàng)建一個(gè)SpringMVC程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目啟動(dòng)IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項(xiàng)目,在彈出的對(duì)話框中選擇左側(cè)“SpringInitializr”選項(xiàng)。ServerURL:初始化SpringBoot項(xiàng)目時(shí)SpringInitializr工具所在的服務(wù)器地址。Name:所創(chuàng)建項(xiàng)目的名稱。Location:所創(chuàng)建項(xiàng)目在本地存放的路徑。Language:所創(chuàng)建項(xiàng)目使用的開發(fā)語言。Type:所使用的項(xiàng)目構(gòu)建工具。Group:項(xiàng)目的組名。Artifact:項(xiàng)目的名稱。Packagename:包名。JDK:項(xiàng)目使用的JDK。Packaging:項(xiàng)目打包的方式。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目設(shè)置好項(xiàng)目的相應(yīng)信息,其中項(xiàng)目打包方式為Jar。單擊“Next”按鈕,進(jìn)入SpringBoot場(chǎng)景依賴選擇界面。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目項(xiàng)目中想要添加SpringMVC,可以勾選Web類別下的SpringWeb,創(chuàng)建項(xiàng)目時(shí)就會(huì)添加SpringWeb的依賴。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目Chapter02Application.java:項(xiàng)目的啟動(dòng)類,在該類中可以定義啟動(dòng)項(xiàng)目的方法。static:靜態(tài)資源文件夾。templates:模板頁(yè)面文件夾。perties:全局配置文件。pom.xml:Maven工作的主要配置文件。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目Chapter02Application類有一個(gè)@SpringBootApplication注解,并且只有一個(gè)main()方法。其中,@SpringBootApplication注解用于標(biāo)注當(dāng)前類是SpringBoot的配置類,main()方法中調(diào)用SpringApplication類的run()方法來創(chuàng)建Spring容器,運(yùn)行SpringBoot程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目2.編寫SpringMVC控制器在項(xiàng)目com.itheima.chapter02包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請(qǐng)求的方法index()。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目3.運(yùn)行項(xiàng)目運(yùn)行文件Chapter02Application.java,啟動(dòng)程序。2.2.2使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目3.運(yùn)行項(xiàng)目在瀏覽器上訪問http://localhost:8080/first。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握SpringBoot入門案例,能夠使用Maven方式構(gòu)建SpringBoot項(xiàng)目2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目非常便捷,但是如果當(dāng)前主機(jī)不能聯(lián)網(wǎng)的話,就無法自動(dòng)下載項(xiàng)目所需的一些依賴,從而導(dǎo)致這種方式無法正常使用。但是SpringBoot項(xiàng)目可以基于Maven構(gòu)建,如果構(gòu)建項(xiàng)目所需要使用的依賴在本地Maven倉(cāng)庫(kù)中已經(jīng)存在,則無須聯(lián)網(wǎng)也可以構(gòu)建SpringBoot項(xiàng)目。下面講解如何在IDEA中使用Maven方式構(gòu)建SpringBoot項(xiàng)目,并在項(xiàng)目中創(chuàng)建一個(gè)SpringMVC程序。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建Maven項(xiàng)目啟動(dòng)IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項(xiàng)目,在彈出的對(duì)話框中選擇左側(cè)“MavenArchetype”選項(xiàng)。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建Maven項(xiàng)目單擊“MavenArchetype”選項(xiàng)左側(cè)界面最上方的“NewProject”創(chuàng)建一個(gè)新的Mave項(xiàng)目。單擊后進(jìn)入“NewProject”選項(xiàng)對(duì)應(yīng)的界面。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建Maven項(xiàng)目設(shè)置好創(chuàng)建項(xiàng)目的信息后,單擊“Create”按鈕即可創(chuàng)建Maven項(xiàng)目。Maven項(xiàng)目創(chuàng)建好之后,會(huì)默認(rèn)打開項(xiàng)目的pom.xml文件。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目2.添加項(xiàng)目依賴創(chuàng)建一般的Maven項(xiàng)目時(shí),需要手動(dòng)在pom.xml文件中插入對(duì)應(yīng)的依賴信息。插入項(xiàng)目繼承的工程依賴,以及SpringWeb和測(cè)試相關(guān)的依賴。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.4</version><relativePath/></parent>項(xiàng)目繼承的父依賴2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目2.添加項(xiàng)目依賴<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的依賴測(cè)試相關(guān)的依賴2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目默認(rèn)情況下,IDEA會(huì)監(jiān)視項(xiàng)目中pom.xml文件的變化,在pom.xml文件中導(dǎo)入新依賴或更新原有依賴后,IDEA會(huì)通知Maven解析這些更改,并嘗試下載或更新對(duì)應(yīng)的依賴,但有些情況下,依賴可能無法自動(dòng)下載或更新,這時(shí)候就需要手動(dòng)觸發(fā)依賴的下載或更新,具體操作方法為:右鍵單擊項(xiàng)目名,選擇“Maven”→“Reloadproject”重新加載項(xiàng)目即可。小提示2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目3.編寫程序啟動(dòng)類在java文件夾下創(chuàng)建一個(gè)名稱為com.itheima.chapter02maven的包,在該包下創(chuàng)建啟動(dòng)類Chapter02MavenApplication。4.編寫SpringMVC控制器在項(xiàng)目com.itheima.chapter02maven包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請(qǐng)求的方法index()。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目5.運(yùn)行項(xiàng)目運(yùn)行文件Chapter02MavenApplication.java,啟動(dòng)程序,控制臺(tái)輸出的信息如下圖。2.2.3使用Maven方式構(gòu)建SpringBoot項(xiàng)目5.運(yùn)行項(xiàng)目在瀏覽器中訪問http://localhost:8080/first。SpringBoot原理解析2.32.3

SpringBoot原理解析通過SpringBoot入門案例的實(shí)現(xiàn),相信大家能夠感受到,與使用Spring整合SpringMVC進(jìn)行開發(fā)時(shí)需要設(shè)置煩瑣的依賴和配置信息相比,使用SpringBoot整合SpringMVC只需添加少量的依賴信息即可,開發(fā)過程也比較簡(jiǎn)潔。SpringBoot項(xiàng)目中可以簡(jiǎn)化依賴配置和常用工程的相關(guān)配置信息,這主要依靠它的起步依賴和自動(dòng)配置。下面結(jié)合SpringBoot入門案例對(duì)SpringBoot的起步依賴、自動(dòng)配置和執(zhí)行流程的原理進(jìn)行分析和講解。2.3.1

起步依賴先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SpringBoot起步依賴,能夠簡(jiǎn)述SpringBoot起步依賴的原理2.3.1

起步依賴起步依賴本質(zhì)上是一個(gè)Maven項(xiàng)目對(duì)象模型,該模型中定義了對(duì)其它庫(kù)的傳遞依賴,SpringBoot提供了眾多起步依賴來降低項(xiàng)目依賴的復(fù)雜度。在SpringBoot入門案例中,項(xiàng)目的pom.xml文件中主要引入了兩個(gè)啟動(dòng)器作為當(dāng)前項(xià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進(jìn)入對(duì)應(yīng)的源碼文件中查看。2.spring-boot-starter-web依賴spring-boot-starter-web就是使用SpringMVC構(gòu)建Web應(yīng)用程序的啟動(dòng)器。不僅包含SpringMVC的依賴信息和Spring整合SpringMVCWeb開發(fā)的依賴信息,還包含了其他的一些依賴信息。2.3.1

起步依賴SpringBoot官方提供了大量的啟動(dòng)器,其基本都是通過“spring-boot-starter-技術(shù)名稱”格式命名,通過啟動(dòng)器的名稱通??梢灾浪峁┑墓δ?。例如,spring-boot-starter-web表示它提供Web相關(guān)的功能,spring-boot-starter-jdbc表示它提供JDBC相關(guān)的功能。名稱描述spring-boot-starter-parent核心啟動(dòng)器,提供了一組默認(rèn)的配置,這些配置涵蓋了日志、YAML、Maven插件等多個(gè)方面,常被作為父依賴spring-boot-starter-logging提供Logging相關(guān)的日志功能spring-boot-starter-thymeleaf用于集成Thymeleaf模板引擎到SpringBoot應(yīng)用程序中spring-boot-starter-web提供了構(gòu)建Web應(yīng)用程序所需的依賴項(xiàng)和SpringMVC自動(dòng)配置,使用Tomcat作為默認(rèn)的嵌入式容器spring-boot-starter-test支持常規(guī)的測(cè)試依賴,包括Junit、Hamcrest、Mockito和spring-test模塊spring-boot-starter-jdbc結(jié)合JDBC和HikariCP連接池的啟動(dòng)器,對(duì)數(shù)據(jù)源自動(dòng)裝配,并提供JdbcTemplate簡(jiǎn)化數(shù)據(jù)庫(kù)操作常見的SpringBoot應(yīng)用程序啟動(dòng)器2.3.1

起步依賴名稱描述spring-boot-starter-data-jpa使用SpringDataJPA與Hibernate的啟動(dòng)器spring-boot-starter-data-redis用于集成Redis的啟動(dòng)器,可以自動(dòng)引入Redis相關(guān)的依賴和配置,并提供與SpringBoot集成所需的自動(dòng)化配置和功能spring-boot-starter-log4j2提供Log4j2相關(guān)的日志功能spring-boot-starter-activemq使用ApacheActiveMQ實(shí)現(xiàn)的Java消息服務(wù)啟動(dòng)器spring-boot-starter-security使用SpringSecurity的啟動(dòng)器spring-boot-starter-dubbo提供Dubbo框架的相關(guān)功能常見的SpringBoot應(yīng)用程序啟動(dòng)器2.3.1

起步依賴SpringBoot官方并沒有為所有開發(fā)場(chǎng)景的技術(shù)框架都提供了啟動(dòng)器,例如,數(shù)據(jù)庫(kù)操作框架MyBatis、阿里巴巴的Druid數(shù)據(jù)源等。為了充分利用SpringBoot框架的優(yōu)勢(shì),一些第三方技術(shù)廠商主動(dòng)與SpringBoot框架進(jìn)行了整合,實(shí)現(xiàn)了各自的依賴啟動(dòng)器,例如,MyBatis提供的啟動(dòng)器mybatis-spring-boot-starter。不過在項(xiàng)目pom.xml文件中引入這些第三方的啟動(dòng)器時(shí),需要自行配置對(duì)應(yīng)的依賴版本號(hào)。2.3.1

起步依賴spring-boot-starter-parent和普通的starter都使SpringBoot項(xiàng)目簡(jiǎn)化了配置,但是他們兩個(gè)的功能卻不相同。spring-boot-starter-parent:定義了很多個(gè)常見組件或框架的依賴版本號(hào),組合成一套最優(yōu)搭配的技術(shù)版本,更便于統(tǒng)一管理依賴的版本,且減少了依賴的沖突。普通的starter:在坐標(biāo)中定了若干個(gè)坐標(biāo),減少依賴配置的代碼量。2.3.2

自動(dòng)配置先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SpringBoot自動(dòng)配置,能夠簡(jiǎn)述SpringBoot自動(dòng)配置的原理2.3.2

自動(dòng)配置SpringBoot采用約定優(yōu)于配置的設(shè)計(jì)思想,將SpringBoot開發(fā)過程中可能會(huì)遇到的配置信息提前配置好,并寫在自動(dòng)配置的JAR包中。項(xiàng)目啟動(dòng)時(shí)會(huì)自動(dòng)檢測(cè)項(xiàng)目類路徑下所有的依賴JAR包,將檢測(cè)到的Bean注冊(cè)到Spring容器中,并根據(jù)檢測(cè)的依賴進(jìn)行自動(dòng)配置。2.3.2

自動(dòng)配置@SpringBootConfiguration標(biāo)注當(dāng)前類是一個(gè)配置類,它是一個(gè)復(fù)合注解。1.@SpringBootConfiguration@EnableAutoConfiguration可以用于開啟SpringBoot的自動(dòng)配置,它也是一個(gè)復(fù)合注解。2.@EnableAutoConfiguration@ComponentScan注解是一個(gè)組件掃描器,其主要作用是掃描指定包及其子包下所有注解類文件作為Spring容器的組件使用。3.@ComponentScan@SpringBootApplication注解2.3.2

自動(dòng)配置1.

@SpringBootConfiguration查看@SpringBootConfiguration的源碼@SpringBootConfiguration是@Configuration的派生注解,擁有@Configuration注解的功能。@Configuration是@Component的派生注解,所以被@SpringBootApplication標(biāo)注的類可以被掃描到Spring的IoC容器中。2.3.2

自動(dòng)配置2.@EnableAutoConfiguration@EnableAutoConfiguration主要通過代碼中的@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})實(shí)現(xiàn)自動(dòng)配置。@AutoConfigurationPackage:主要作用是獲取項(xiàng)目啟動(dòng)類所在根目錄,從而指定組件掃描器掃描的包位置。@Import({AutoConfigurationImportSelector.class}:導(dǎo)入AutoConfigurationImportSelector類,該類中提供了一個(gè)獲取自動(dòng)配置的方法getAutoConfigurationEntry(),用于篩選出當(dāng)前項(xiàng)目環(huán)境需要啟動(dòng)的自動(dòng)配置類,從而實(shí)現(xiàn)當(dāng)前項(xiàng)目運(yùn)行所需的自動(dòng)配置環(huán)境。查看@EnableAutoConfiguration的源碼2.3.2

自動(dòng)配置@AutoConfigurationPackage也是一個(gè)復(fù)合注解,其中@Import導(dǎo)入了AutoConfigurationPackages.Registrar類,Registrar類屬于AutoConfigurationPackages類中的靜態(tài)內(nèi)部類,該類中提供了批量注冊(cè)組件到Spring容器的方法。查看@AutoConfigurationPackage的源碼2.@EnableAutoConfiguration2.3.2

自動(dòng)配置(1)從SpringBoot自動(dòng)配置JAR包的META-INF/spring.factories和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中獲取所有候選自動(dòng)配置類。(2)根據(jù)項(xiàng)目pom.xml文件中加入的依賴篩選出最終符合當(dāng)前項(xiàng)目運(yùn)行環(huán)境對(duì)應(yīng)的自動(dòng)配置類。查看@Import({AutoConfigurationImportSelector.class})的源碼2.@EnableAutoConfiguration2.3.2

自動(dòng)配置3.

@ComponentScan@ComponentScan注解具體掃描的包的根路徑由SpringBoot項(xiàng)目主程序啟動(dòng)類所在包位置決定,在掃描過程中由前面介紹的@AutoConfigurationPackage注解進(jìn)行解析,從而得到SpringBoot項(xiàng)目主程序啟動(dòng)類所在包的具體位置。@ComponentScan(excludeFilters={@Filter(type=FilterType.CUSTOM,classes={TypeExcludeFilter.class}),@Filter(type=FilterType.CUSTOM,classes={AutoConfigurationExcludeFilter.class})})指定掃描時(shí)過濾掉不加載到Spring容器的類。在BeanFactory中查找所有類型為TypeExcludeFilter的組件,并去執(zhí)行其自定義的過濾方法。用于過濾其他同時(shí)使用@Configuration和@EnableAutoConfigure的類。2.3.3

執(zhí)行流程先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SpringBoot執(zhí)行流程,能夠基于SpringBoot入門案例簡(jiǎn)述SpringBoot的執(zhí)行流程2.3.3

執(zhí)行流程SpringBoot入門案例啟動(dòng)類的main()方法中只有一行代碼,使用SpringApplication類調(diào)用run()方法,執(zhí)行該行代碼,就啟動(dòng)了整個(gè)SpringBoot項(xiàng)目。為了進(jìn)一步了解SpringBoot的啟動(dòng)原理,下面基于SpringBoot入門案例講解SpringBoot的執(zhí)行流程。2.3.3

執(zhí)行流程查看SpringApplication調(diào)用的run()方法的源碼SpringApplication的run()方法中調(diào)用了另一個(gè)重載的run()方法,被調(diào)用的重載run()方法內(nèi)部執(zhí)行了兩個(gè)操作,分別是創(chuàng)建SpringApplication實(shí)例和調(diào)用run()方法。2.3.3

執(zhí)行流程創(chuàng)建SpringApplication實(shí)例主要執(zhí)行了如下操作。①

初始化資源加載器,此處將資源加載器置空。②初始化加載資源的類。③推斷當(dāng)前啟動(dòng)的項(xiàng)目的類型。④設(shè)置應(yīng)用程序的上下文初始化器。⑤設(shè)置應(yīng)用程序的事件監(jiān)聽器。⑥設(shè)置項(xiàng)目的主程序啟動(dòng)類。1.創(chuàng)建SpringApplication實(shí)例2.3.3

執(zhí)行流程run()方法的核心代碼執(zhí)行內(nèi)容。(1)創(chuàng)建啟動(dòng)上下文對(duì)象。(2)獲取并啟動(dòng)運(yùn)行監(jiān)聽器。(3)將應(yīng)用程序參數(shù)封裝為ApplicationArguments類型對(duì)象。(4)配置環(huán)境信息ConfigurableEnvironment的基礎(chǔ)的配置信息。(5)配置需要忽略的Bean信息。(6)創(chuàng)建應(yīng)用程序上下文對(duì)象,并設(shè)置上下文對(duì)象的應(yīng)用程序啟動(dòng)器。(7)對(duì)應(yīng)用上下文環(huán)境進(jìn)行準(zhǔn)備。(8)刷新應(yīng)用程序上下文,初始化IoC容器里面的Bean。(9)調(diào)用了監(jiān)聽器的started()方法,通知監(jiān)聽器上下文啟動(dòng)完成。2.調(diào)用run()方法查看run()方法執(zhí)行的過程SpringBoot配置2.42.4SpringBoot配置SpringBoot提供了眾多默認(rèn)配置,這極大提高了應(yīng)用程序的開發(fā)效率。SpringBoot啟動(dòng)時(shí)會(huì)自動(dòng)讀取應(yīng)用程序中全局配置文件的配置,開發(fā)者想要根據(jù)自身需求覆蓋SpringBoot的默認(rèn)配置,可以通過修改全局配置文件實(shí)現(xiàn),并通過配置綁定將配置文件中的值與Bean中的屬性進(jìn)行綁定,使這些配置信息可以在應(yīng)用程序中使用。下面對(duì)SpringBoot配置中的全局配置文件和配置綁定進(jìn)行講解。2.4.1全局配置文件先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握在全局配置文件中配置數(shù)據(jù),能夠在perties配置文件和application.yml配置文件中正確配置數(shù)據(jù)2.4.1全局配置文件SpringBoot默認(rèn)使用的全局配置文件有perties、application.yml和application.yaml,其中,application.yml與application.yaml文件類型相同,只是為了滿足不同操作系統(tǒng)對(duì)文件命名的要求而使用了不同的擴(kuò)展名。下面對(duì)SpringBoot配置中的全局配置文件進(jìn)行講解。2.4.1全局配置文件1.perties配置文件perties文件中可以定義SpringBoot項(xiàng)目的相關(guān)屬性,屬性可采用鍵值對(duì)格式進(jì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)字面量類型屬性字面量是指單個(gè)的不可拆分的值,例如:數(shù)字、字符串、布爾值等。在perties文件中配置字面量的屬性時(shí),直接將字面量作為Value寫在鍵值對(duì)中即可,且默認(rèn)情況下字符串是不需要使用單引號(hào)或雙引號(hào)進(jìn)行修飾的。address=beijingage=132.4.1全局配置文件如果需要配置的屬性為對(duì)象的屬性,可以通過“對(duì)象名.屬性名”的方式指定屬性的鍵。對(duì)象中可能包含多個(gè)屬性,在perties文件中為對(duì)象的屬性賦值時(shí),一個(gè)屬性對(duì)應(yīng)一對(duì)鍵值對(duì)。user.username=lisiuser.age=18(1)字面量類型屬性2.4.1全局配置文件(2)數(shù)組類型屬性在perties文件中配置數(shù)組類型屬性時(shí),可以將數(shù)組元素的值寫在一行內(nèi),元素值之間使用逗號(hào)(,)間隔,也可以在多行分別根據(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集合類型屬性u(píng)ser.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)和配置信息,它使用縮進(jìn)的方式表示層級(jí)關(guān)系,使得配置文件和數(shù)據(jù)結(jié)構(gòu)的表達(dá)相對(duì)簡(jiǎn)潔和易于閱讀。YAML支持的數(shù)據(jù)包括列表、鍵值對(duì)和字符串、數(shù)字等。YAML文件的擴(kuò)展名為.yml或.yaml,編寫時(shí)需要遵循如下規(guī)則。使用縮進(jìn)表示層級(jí)關(guān)系。

縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格??s進(jìn)的空格數(shù)不重要,但同級(jí)元素必須左側(cè)對(duì)齊。對(duì)字母大小寫敏感。2.4.1全局配置文件在YAML文件中使用“Key:Value”的形式表示一對(duì)鍵值對(duì),其中,Value前面有一個(gè)空格,并且該空格不能省略。在配置字面量類型屬性時(shí),直接將字面量作為Value寫在鍵值對(duì)中即可,且默認(rèn)情況下字符串是不需要使用單引號(hào)或雙引號(hào)進(jìn)行修飾的。address:beijingage:13(1)字面量類型屬性2.4.1全局配置文件如果需要配置的屬性為對(duì)象的屬性,配置的方式有縮進(jìn)式和行內(nèi)式兩種。#縮進(jìn)式consumer:username:lisiage:18#行內(nèi)式consumer:{username:lisi,age:18}(1)字面量類型屬性2.4.1全局配置文件(2)數(shù)組類型和單列集合屬性當(dāng)YAML配置文件中配置的屬性為數(shù)組類型或單列集合時(shí),也可以使用縮進(jìn)式寫法和行內(nèi)式寫法。consumer:hobby:-play-readconsumer:hobby:[play,read]or縮進(jìn)式行內(nèi)式2.4.1全局配置文件(3)Map集合屬性當(dāng)YAML配置文件中配置的屬性為Map集合時(shí),可以使用縮進(jìn)式寫法和行內(nèi)式寫法。consumer:order:1001:cookie1002:cakeconsumer:order:{1001:cookie,1002:cake}or縮進(jìn)式行內(nèi)式多學(xué)一招默認(rèn)配置文件SpringBoot項(xiàng)目將perties或application.yml作為項(xiàng)目的默認(rèn)配置文件。SpringBoot項(xiàng)目中可以存在多個(gè)perties或application.yml,SpringBoot啟動(dòng)時(shí)會(huì)掃描以下5個(gè)位置的perties和application.yml文件,并將掃描到的文件作為SpringBoot的默認(rèn)配置文件。

file:./config/*/

file:./config/file:./classpath:/config/

classpath:/多學(xué)一招默認(rèn)配置文件SpringBoot項(xiàng)目將perties或application.yml作為項(xiàng)目的默認(rèn)配置文件。Spring上述5個(gè)位置下如果存在perties和application.yml文件,在項(xiàng)目啟動(dòng)就都會(huì)被加載。加載多個(gè)perties或application.yml文件時(shí),文件中的配置會(huì)根據(jù)文件所處的位置劃分優(yōu)先級(jí),優(yōu)先級(jí)規(guī)則如下。上述位置1~位置5的優(yōu)先級(jí)依次降低,序號(hào)越小優(yōu)先級(jí)越高。位于相同位置的perties的優(yōu)先級(jí)高于application.yml,application.yml的優(yōu)先級(jí)高于application.yaml。存在相同的配置內(nèi)容時(shí),高優(yōu)先級(jí)的內(nèi)容會(huì)覆蓋低優(yōu)先級(jí)的內(nèi)容。存在不同的配置內(nèi)容時(shí),高優(yōu)先級(jí)和低優(yōu)先級(jí)的配置內(nèi)容取并集。2.4.2配置綁定先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握配置綁定方式,能夠通過@Value注解和@ConfigurationProperties注解綁定配置文件中的信息2.4.2配置綁定在使用SpringBoot全局配置文件配置屬性時(shí),如果配置的屬性是SpringBoot內(nèi)置的屬性(如服務(wù)端口server.port),那么SpringBoot會(huì)自動(dòng)掃描并讀取配置文件中的屬性值并覆蓋原有的默認(rèn)屬性值。如果配置的屬性是用戶自定義的屬性,那么可以通過Java代碼去讀取該配置屬性,并且把屬性值綁定到Bean。在SpringBoot項(xiàng)目中可以通過@Value和@ConfigurationProperties注解綁定配置文件中的信息,下面分別對(duì)這兩種配置綁定進(jìn)行講解。2.4.2配置綁定1.@Va

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論