Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第1-6章 Spring Boot開發(fā)入門- Spring Boot整合緩存_第1頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第1-6章 Spring Boot開發(fā)入門- Spring Boot整合緩存_第2頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第1-6章 Spring Boot開發(fā)入門- Spring Boot整合緩存_第3頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第1-6章 Spring Boot開發(fā)入門- Spring Boot整合緩存_第4頁(yè)
Spring Boot企業(yè)級(jí)開發(fā)教程(第2版) 課件 第1-6章 Spring Boot開發(fā)入門- Spring Boot整合緩存_第5頁(yè)
已閱讀5頁(yè),還剩506頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章SpringBoot開發(fā)入門《SpringBoot企業(yè)級(jí)開發(fā)教程(第2版)》學(xué)習(xí)目標(biāo)/Target了解SpringBoot簡(jiǎn)介,能夠簡(jiǎn)述SpringBoot的發(fā)展過(guò)程了解SpringBoot的特性,能夠簡(jiǎn)述SpringBoot的特性掌握SpringBoot入門案例,能夠使用SpringInitializr方式和Maven方式構(gòu)建SpringBoot項(xiàng)目學(xué)習(xí)目標(biāo)/Target了解單元測(cè)試與熱部署,能夠?qū)pringBoot項(xiàng)目進(jìn)行單元測(cè)試和熱部署熟悉SpringBoot項(xiàng)目打包和運(yùn)行,能夠?qū)pringBoot項(xiàng)目打包為JAR包和WAR包并運(yùn)行熟悉SpringBoot原理解析,能夠簡(jiǎn)述SpringBoot起步依賴、自動(dòng)配置和執(zhí)行流程的原理章節(jié)概述/SummarySpring是一個(gè)非常優(yōu)秀的組件管理容器,但是為了管理容器中的組件,使用Spring搭建JavaEE應(yīng)用程序時(shí)往往需要進(jìn)行大量的配置或注解,這些配置工作都屬于項(xiàng)目的基礎(chǔ)搭建,通常與業(yè)務(wù)功能無(wú)關(guān),并且不熟悉搭建過(guò)程的人員在配置時(shí)很容易出錯(cuò)。為了簡(jiǎn)化Spring應(yīng)用的搭建和配置過(guò)程,SpringBoot應(yīng)運(yùn)而生。SpringBoot是一個(gè)基于Spring的全新開源框架,它可以簡(jiǎn)化Spring應(yīng)用的初始搭建和配置過(guò)程,使用更加簡(jiǎn)單,功能更加豐富。目錄/Contents1.11.2SpringBoot概述SpringBoot入門案例1.3SpringBoot原理解析1.4單元測(cè)試與熱部署1.5SpringBoot項(xiàng)目打包和運(yùn)行SpringBoot概述1.11.1.1

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

先定一個(gè)小目標(biāo)!了解SpringBoot簡(jiǎn)介,能夠簡(jiǎn)述SpringBoot的發(fā)展過(guò)程1.1.1

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

SpringBoot簡(jiǎn)介Pivotal團(tuán)隊(duì)在原有Spring框架的基礎(chǔ)上通過(guò)注解的方式進(jìn)一步簡(jiǎn)化了Spring框架的使用,并基于Spring框架開發(fā)了全新的SpringBoot框架。2014年4月正式推出了SpringBoot1.0版本,同時(shí)在2018年3月又推出了SpringBoot2.0版本。SpringBoot2.x版本在SpringBoot1.x版本的基礎(chǔ)上進(jìn)行了諸多功能的改進(jìn)和擴(kuò)展,同時(shí)進(jìn)行了大量的代碼重構(gòu)。1.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ā)過(guò)程中大量使用約定優(yōu)于配置的思想來(lái)擺脫Spring框架中各種復(fù)雜的手動(dòng)配置。SpringBoot1.1.1SpringBoot簡(jiǎn)介隨著近幾年微服務(wù)開發(fā)的需求增長(zhǎng)和火爆,如何快速、簡(jiǎn)便地構(gòu)建一個(gè)準(zhǔn)生產(chǎn)環(huán)境的Spring應(yīng)用成為擺在開發(fā)者面前的難題,SpringBoot框架的出現(xiàn)恰好完美解決了這些問(wèn)題,同時(shí)內(nèi)部還簡(jiǎn)化了許多常用的第三方庫(kù)配置,使微服務(wù)開發(fā)更加便利,這也間接體現(xiàn)了SpringBoot框架的優(yōu)勢(shì)和學(xué)習(xí)SpringBoot的必要性。1.1.2

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

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

SpringBoot的特性6.無(wú)須生成配置代碼和XML配置文件。4.提供了大量的自動(dòng)化配置類或第三方類庫(kù)。5.提供生產(chǎn)就緒功能。1.可快速構(gòu)建獨(dú)立的Spring應(yīng)用。3.提供固化的“starter”依賴,簡(jiǎn)化構(gòu)建配置。2.直接嵌入Tomcat、Jetty和Undertow等Web容器,無(wú)須部署WAR文件。SpringBoot的特性SpringBoot入門案例1.21.2.1

環(huán)境準(zhǔn)備先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握SpringBoot入門案例環(huán)境準(zhǔn)備,能夠獨(dú)立搭建SpringBoot入門案例所需要準(zhǔn)備的環(huán)境1.2.1

環(huán)境準(zhǔn)備SpringBoot2.7.6依賴SpringFramework5.3.24,而運(yùn)行SpringFramework5.3.24需要Java8及以上版本進(jìn)行支撐,在此選擇當(dāng)前使用較為廣泛并運(yùn)行較為穩(wěn)定的JDK11。1.JDKSpringBoot2.7.6官方聲明支持的項(xiàng)目構(gòu)建工具包括有Maven和Gradle,其中Maven的版本需要3.5及以上版本。在此采用Maven3.6.3對(duì)SpringBoot進(jìn)行項(xiàng)目構(gòu)建管理。2.項(xiàng)目構(gòu)建工具業(yè)界較為常用有Eclipse和IntelliJIDEA,相比Eclipse而言,IntelliJIDEA的開發(fā)效率更高。在此選擇IntelliJIDEA的Ultimate2022.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)目1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.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程序。1.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ā)語(yǔ)言。Type:使用的項(xiàng)目構(gòu)建工具。Group:項(xiàng)目的組名。Artifact:項(xiàng)目的名稱。Packagename:包名。JDK:項(xiàng)目使用的JDK。Packaging:項(xiàng)目打包的形式。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目填寫好項(xiàng)目的相應(yīng)信息,其中項(xiàng)目打包方式為Jar。單擊“Next”按鈕,進(jìn)入SpringBoot場(chǎng)景依賴選擇界面。1.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的依賴。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目Chapter01Application.java:項(xiàng)目的啟動(dòng)類,在該類中可以定義啟動(dòng)項(xiàng)目的方法。static:靜態(tài)資源文件夾。templates:模板頁(yè)面文件夾。perties:全局配置文件。pom.xml:Maven進(jìn)行工作的主要配置文件。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目文件1-1Chapter01Application.java源代碼打開Chapter01Application.java,文件中的內(nèi)容如文件1-1所示。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目1.構(gòu)建SpringBoot項(xiàng)目文件1-2pom.xml源代碼打開項(xiàng)目的pom.xml文件,內(nèi)容如文件1-2所示。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目2.編寫SpringMVC控制器文件1-3HelloController.java源代碼在項(xiàng)目com.itheima.chapter01包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請(qǐng)求的方法index(),具體如文件1-3所示。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目3.運(yùn)行項(xiàng)目運(yùn)行文件Chapter01Application.java,啟動(dòng)程序。1.2.2

使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目3.運(yùn)行項(xiàng)目在瀏覽器上訪問(wèn)http://localhost:8080/first。1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握SpringBoot入門案例,能夠使用Maven方式構(gòu)建SpringBoot項(xiàng)目1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目使用SpringInitializr方式構(gòu)建SpringBoot項(xiàng)目非常便捷,但是如果當(dāng)前主機(jī)不能聯(lián)網(wǎng)的話,就無(wú)法自動(dòng)下載項(xiàng)目所需的一些組件和依賴,導(dǎo)致這種方式無(wú)法正常使用。SpringBoot項(xiàng)目可以基于Maven構(gòu)建,如果構(gòu)建項(xiàng)目所需要使用的組件和依賴在本地Maven倉(cāng)庫(kù)中已經(jīng)存在,則無(wú)須聯(lián)網(wǎng)也可以構(gòu)建SpringBoot項(xiàng)目。下面講解如何在IDEA中使用Maven方式構(gòu)建SpringBoot項(xiàng)目,并在項(xiàng)目中創(chuàng)建一個(gè)SpringMVC程序。1.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)。1.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)的界面。1.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文件。1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目2.添加項(xiàng)目依賴創(chuàng)建一般的Maven項(xiàng)目時(shí),需要手動(dòng)在pom.xml文件中插入對(duì)應(yīng)的依賴信息。在此參照文件1-2插入項(xiàng)目繼承的工程依賴,以及SpringWeb和測(cè)試相關(guān)的依賴。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/></parent>項(xiàng)目繼承的父依賴1.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)的依賴1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目在項(xiàng)目pom.xml文件中導(dǎo)入新依賴或修改其他內(nèi)容后,通常會(huì)自動(dòng)更新而無(wú)須手動(dòng)管理。但有些情況下,依賴文件可能還是無(wú)法自動(dòng)加載,這時(shí)候就需要重新手動(dòng)加載依賴文件,具體操作方法為:右鍵單擊項(xiàng)目名,選擇“Maven”→“Reloadproject”重新加載項(xiàng)目即可。小提示1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目3.編寫程序啟動(dòng)類在java文件夾下創(chuàng)建一個(gè)名稱為com.itheima.chapter01maven的包,在該包下參照文件1-1創(chuàng)建啟動(dòng)類Chapter01MavenApplication,具體如文件1-4所示。文件1-4Chapter01MavenApplication.java源代碼1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目4.編寫SpringMVC控制器在項(xiàng)目com.itheima.chapter01maven包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,該類中代碼與文件1-3一致即可。1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目5.運(yùn)行項(xiàng)目運(yùn)行文件Chapter01MavenApplication.java,啟動(dòng)程序。1.2.3

使用Maven方式構(gòu)建SpringBoot項(xiàng)目5.運(yùn)行項(xiàng)目在瀏覽器中訪問(wèn)http://localhost:8080/first。SpringBoot原理解析1.31.3

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

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

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

起步依賴起步依賴本質(zhì)上是一個(gè)Maven項(xiàng)目對(duì)象模型,該模型中定義了對(duì)其它庫(kù)的傳遞依賴,SpringBoot提供了眾多起步依賴來(lái)降低項(xiàng)目依賴的復(fù)雜度。在SpringBoot入門案例中,項(xiàng)目的pom.xml文件中主要引入了兩個(gè)起步依賴,分別是spring-boot-starter-parent和spring-boot-starter-web。1.3.1

起步依賴1.spring-boot-starter-parent依賴spring-boot-starter-parent中定義了很多常見技術(shù)的版本信息,組合成一套最優(yōu)搭配的技術(shù)版本。可以在IDEA中按住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ā)的依賴信息,還包含了其他的一些依賴信息。1.3.1

起步依賴SpringBoot官方提供了大量的啟動(dòng)器,其名稱基本都是通過(guò)“spring-boot-starter-技術(shù)名稱”這樣的格式命名,通過(guò)啟動(dòng)器的名稱通常可以知道它所提供的功能。例如,spring-boot-starter-web表示提供Web相關(guān)的功能,spring-boot-starter-jdbc表示提供JDBC相關(guān)的功能。名稱描述spring-boot-starter-parent核心啟動(dòng)器,包括自動(dòng)配置支持、日志記錄和YAML,常被作為父依賴spring-boot-starter-logging提供Logging相關(guān)的日志功能spring-boot-starter-thymeleaf使用Thymeleaf視圖構(gòu)造MVCWeb應(yīng)用程序的啟動(dòng)器spring-boot-starter-web使用Spring

MVC構(gòu)建Web,包括RESTful應(yīng)用程序,使用Tomcat作為默認(rèn)的嵌入式容器的啟動(dòng)器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)器1.3.1

起步依賴名稱描述spring-boot-starter-data-jpa使用SpringJPA與Hibernate的啟動(dòng)器spring-boot-starter-data-redisRediskey-value數(shù)據(jù)存儲(chǔ)和SpringDataRedis與Jedis客戶端的啟動(dòng)器spring-boot-starter-log4j2提供Log4j2相關(guān)的日志功能spring-boot-starter-mail提供郵件相關(guān)功能spring-boot-starter-activemq使用ApacheActiveMQ的JMS啟動(dòng)器spring-boot-starter-data-mongodb使用MongoDB面向文檔的數(shù)據(jù)庫(kù)和SpringDataMongoDB的啟動(dòng)器spring-boot-starter-actuator提供應(yīng)用監(jiān)控與監(jiān)控相關(guān)的功能spring-boot-starter-security使用Spring

Security的啟動(dòng)器spring-boot-starter-dubbo提供Dubbo框架的相關(guān)功能常見的SpringBoot應(yīng)用程序啟動(dòng)器1.3.1

起步依賴SpringBoot官方并沒有為所有場(chǎng)景開發(fā)的技術(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。不過(guò)在項(xiàng)目pom.xml文件中引入這些第三方的啟動(dòng)器時(shí),需要自行配置對(duì)應(yīng)的依賴版本號(hào)。1.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),減少依賴配置的代碼量。1.3.2自動(dòng)配置先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SpringBoot自動(dòng)配置,能夠簡(jiǎn)述SpringBoot自動(dòng)配置的原理1.3.2自動(dòng)配置SpringBoot采用約定大于配置的設(shè)計(jì)思想,將SpringBoot開發(fā)過(guò)程中可能會(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)配置。1.3.2

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

自動(dòng)配置1.

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

自動(dòng)配置2.@EnableAutoConfiguration@EnableAutoConfiguration主要通過(guò)代碼中的@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的源碼1.3.2

自動(dòng)配置@Import導(dǎo)入了AutoConfigurationPackages.Registrar類,Registrar類屬于AutoConfigurationPackages類中的靜態(tài)內(nèi)部類,該類中提供了批量注冊(cè)組件到Spring容器的方法。查看@AutoConfigurationPackage的源碼2.@EnableAutoConfiguration1.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.@EnableAutoConfiguration1.3.2

自動(dòng)配置3.

@ComponentScan@ComponentScan注解具體掃描的包的根路徑由SpringBoot項(xiàng)目主程序啟動(dòng)類所在包位置決定,在掃描過(guò)程中由前面介紹的@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í)過(guò)濾掉不加載到Spring容器的類。在BeanFactory中查找所有類型為TypeExcludeFilter的組件,并去執(zhí)行其自定義的過(guò)濾方法。用于過(guò)濾其他同時(shí)使用@Configuration和@EnableAutoConfigure的類。1.3.3

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

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

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

執(zhí)行流程創(chuàng)建SpringApplication實(shí)例主要執(zhí)行了如下操作。(1)初始化資源加載器,此處將資源加載器置空。(2)初始化加載資源類集合。(3)推斷當(dāng)前Web應(yīng)用類型。(4)設(shè)置應(yīng)用上下文初始化器。(5)設(shè)置監(jiān)聽器。(6)推斷主應(yīng)用類。1.創(chuàng)建SpringApplication實(shí)例1.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í)行的過(guò)程單元測(cè)試與熱部署1.41.4.1

單元測(cè)試先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解單元測(cè)試,能夠在SpringBoot項(xiàng)目中進(jìn)行Web環(huán)境模擬測(cè)試和業(yè)務(wù)組件測(cè)試1.4.1

單元測(cè)試單元測(cè)試是針對(duì)一個(gè)獨(dú)立的工作單元進(jìn)行正確性驗(yàn)證的測(cè)試,對(duì)程序開發(fā)來(lái)說(shuō)非常重要,通過(guò)單元測(cè)試不僅能增強(qiáng)程序的健壯性,而且為程序的重構(gòu)提供了依據(jù)。SpringBoot為項(xiàng)目的單元測(cè)試提供了很好的支持。在項(xiàng)目中添加測(cè)試依賴啟動(dòng)器后,可以編寫相關(guān)測(cè)試代碼對(duì)SpringBoot項(xiàng)目中相關(guān)功能進(jìn)行單元測(cè)試。根據(jù)測(cè)試時(shí)候是否需要啟動(dòng)Web服務(wù)器,可以將單元測(cè)試分為Web環(huán)境模擬測(cè)試和業(yè)務(wù)組件測(cè)試。1.4.1

單元測(cè)試SpringBoot提供了@SpringBootTest用于修飾單元測(cè)試用例類。通過(guò)@SpringBootTest注解的webEnvironment屬性可以設(shè)置在測(cè)試用例中啟動(dòng)Web環(huán)境。webEnvironment屬性可以設(shè)置的值有以下4個(gè)。MOCK:為webEnvironment屬性的默認(rèn)值,會(huì)加載一個(gè)WebApplicationContext并提供一個(gè)模擬servlet環(huán)境,屬于適配性的配置,根據(jù)當(dāng)前的設(shè)置確認(rèn)是否啟動(dòng)Web環(huán)境,例如,使用了Servlet的API就會(huì)啟動(dòng)Web環(huán)境。DEFINED_PORT:加載一個(gè)EmbeddedWebApplicationContext并提供一個(gè)真正的servlet環(huán)境,使用自定義的端口作為Web服務(wù)器端口。RANDOM_PORT:加載一個(gè)EmbeddedWebApplicationContext并提供一個(gè)真正的servlet環(huán)境,使用隨機(jī)端口作為Web服務(wù)器端口。NONE:使用SpringApplication加載ApplicationContext,但不啟動(dòng)Web環(huán)境。1.Web環(huán)境模擬測(cè)試1.4.1

單元測(cè)試在項(xiàng)目chapter01測(cè)試文件夾下的com.itheima.chapter01包下編寫測(cè)試用例類WebTest,在該類中啟動(dòng)Web環(huán)境,并使用隨機(jī)端口作為Web服務(wù)器端口。在測(cè)試用例類上使用@AutoConfigureMockMvc注解對(duì)Web虛擬調(diào)用功能開啟,具體如文件1-5所示。文件1-5WebTest.java源代碼1.Web環(huán)境模擬測(cè)試1.4.1

單元測(cè)試選中單元測(cè)試方法testWeb(),鼠標(biāo)右鍵單擊“Run‘testWeb()’”選項(xiàng)啟動(dòng)測(cè)試方法。1.Web環(huán)境模擬測(cè)試1.4.1

單元測(cè)試當(dāng)只需測(cè)試Service層或DAO層等業(yè)務(wù)組件時(shí),則不需要啟動(dòng)Web服務(wù)器,測(cè)試方法直接調(diào)用被測(cè)試組件的方法。在項(xiàng)目chapter01的com.itheima.chapter01包下創(chuàng)建名稱為service的包,在該包下創(chuàng)建類HelloService,具體如文件1-6所示。文件1-6HelloService.java源代碼2.業(yè)務(wù)組件測(cè)試1.4.1

單元測(cè)試定義測(cè)試用例類。在項(xiàng)目chapter01測(cè)試文件夾下的com.itheima.chapter01包下編寫測(cè)試用例類ServiceTest,在該類中不啟動(dòng)Web環(huán)境,具體如文件1-7所示。文件1-7ServiceTest.java源代碼2.業(yè)務(wù)組件測(cè)試1.4.1

單元測(cè)試選中單元測(cè)試方法testService(),右鍵單擊“Run‘testService()’”選項(xiàng)啟動(dòng)測(cè)試方法。2.業(yè)務(wù)組件測(cè)試1.4.2熱部署先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解熱部署,能夠在IDEA中實(shí)現(xiàn)SpringBoot項(xiàng)目的熱部署1.4.2熱部署在開發(fā)過(guò)程中,可能會(huì)不斷地修改業(yè)務(wù)代碼,每次修改之后想要測(cè)試最新的效果往往需要重啟服務(wù),這種重復(fù)的啟動(dòng)操作極大地降低了程序開發(fā)效率。熱部署指的是不用重啟服務(wù),服務(wù)器會(huì)自己悄悄地把更新后的程序重新加載一遍。為了提高開發(fā)效率。SpringBoot框架提供了進(jìn)行熱部署的依賴,用于進(jìn)行項(xiàng)目熱部署。下面在chapter01項(xiàng)目基礎(chǔ)上講解如何進(jìn)行熱部署。1.4.2熱部署1.添加熱部署依賴<!--熱部署依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>在SpringBoot項(xiàng)目進(jìn)行熱部署測(cè)試之前,需要先在項(xiàng)目的pom.xml文件中添加熱部署依賴。1.4.2熱部署2.設(shè)置啟動(dòng)熱部署在IDEA的菜單欄中依次選擇“File”→“Settings”,進(jìn)入IDEA的設(shè)置對(duì)話框,然后選擇“Build,Execution,Deployment”的“Compiler”選項(xiàng)。在右側(cè)勾選“Buildprojectautomatically”選項(xiàng)將項(xiàng)目設(shè)置為自動(dòng)編譯,然后單擊“Apply”→“OK”按鈕保存設(shè)置。1.4.2熱部署2.設(shè)置啟動(dòng)熱部署IDEA的設(shè)置對(duì)話框中,選中“AdvancedSettings”選項(xiàng)。在右側(cè)勾選“Compiler”下的“Allowauto-maketostartevenifdevelopedapplicationiscurrentlyrunning”選項(xiàng),允許自動(dòng)啟動(dòng)當(dāng)前正在運(yùn)行的應(yīng)用程序,然后單擊“Apply”→“OK”按鈕保存設(shè)置。1.4.2熱部署啟動(dòng)chapter01項(xiàng)目,在瀏覽器中訪問(wèn)“http://localhost:8080/first”。3.熱部署效果測(cè)試1.4.2熱部署啟動(dòng)chapter01項(xiàng)目,在瀏覽器訪問(wèn)“http://localhost:8080/first”。為了測(cè)試配置的熱部署是否有效,接下來(lái),在不關(guān)閉當(dāng)前項(xiàng)目的情況下,將HelloController類中index()方法的返回值修改為“WelcometoSpringBootApplication!developed”。5秒后刷新瀏覽器頁(yè)面。3.熱部署效果測(cè)試SpringBoot項(xiàng)目打包和運(yùn)行1.51.5

SpringBoot項(xiàng)目打包和運(yùn)行在實(shí)際開發(fā)中,通常項(xiàng)目完成后不會(huì)將源代碼公布給所有人,而是將項(xiàng)目和其依賴的組件組織成一個(gè)可執(zhí)行文件分發(fā)到目標(biāo)系統(tǒng)上運(yùn)行或者交付給其他人使用,這個(gè)組織的過(guò)程也稱為打包。項(xiàng)目打包后在其他環(huán)境可以很方便的運(yùn)行,SpringBoot項(xiàng)目打包時(shí)通常會(huì)被創(chuàng)建為可執(zhí)行的JAR包或WAR包,這兩種包內(nèi)部的文件結(jié)構(gòu)不同,其運(yùn)行的方式也不相同。下面,分別對(duì)這兩種方式的打包和運(yùn)行進(jìn)行講解。1.5.1

打包為JAR包并運(yùn)行先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉將SpringBoot項(xiàng)目打包為JAR包并運(yùn)行,能夠獨(dú)立將SpringBoot項(xiàng)目打包為可執(zhí)行的JAR包并運(yùn)行1.5.1

打包為JAR包并運(yùn)行SpringBoot應(yīng)用內(nèi)嵌了Web服務(wù)器,所以基于SpringBoot開發(fā)的Web應(yīng)用也可以獨(dú)立運(yùn)行,無(wú)須部署到其他Web服務(wù)器中。下面,以打包c(diǎn)hapter01項(xiàng)目為例,將SpringBoot項(xiàng)目打包為可執(zhí)行的JAR包并運(yùn)行。1.5.1

打包為JAR包并運(yùn)行1.打包為可執(zhí)行的JAR包(1)添加Maven打包插件。SpringBoot程序是基于Maven創(chuàng)建的,在對(duì)SpringBoot項(xiàng)目進(jìn)行打包前,需要在項(xiàng)目pom.xml文件中加入Maven打包插件。<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>1.5.1

打包為JAR包并運(yùn)行1.打包為可執(zhí)行的JAR包(2)使用IDEA進(jìn)行打包。clean命令:可以清除所有在構(gòu)建過(guò)程中生成的文件。test命令:可以使用合適的單元測(cè)試框架來(lái)測(cè)試編譯的源代碼。package命令:可以完成項(xiàng)目編譯、單元測(cè)試、打包功能。打包時(shí)候跳過(guò)測(cè)試階段1.5.1

打包為JAR包并運(yùn)行如果打包成功會(huì)在項(xiàng)目的target文件夾下創(chuàng)建項(xiàng)目對(duì)應(yīng)的可執(zhí)行JAR包。1.打包為可執(zhí)行的JAR包1.5.1

打包為JAR包并運(yùn)行一個(gè)可執(zhí)行的JAR包可以由JVM

直接執(zhí)行而無(wú)須事先提取文件或者設(shè)置類路徑。對(duì)此可以直接使用Java命令運(yùn)行可執(zhí)行的JAR包。2.運(yùn)行JAR包java–jarJAR包名稱運(yùn)行JAR包的命令的語(yǔ)法格式1.5.1

打包為JAR包并運(yùn)行運(yùn)行JAR包時(shí)可以選擇在IDEA中或者在CMD窗口中執(zhí)行,這兩種方式?jīng)]有什么區(qū)別,這里選擇在CMD窗口中執(zhí)行。在本地打開項(xiàng)目的target文件夾。2.運(yùn)行JAR包1.5.1

打包為JAR包并運(yùn)行項(xiàng)目的target文件夾的地址欄中輸出“CMD”后按下“Enter”鍵,在當(dāng)前文件夾路徑下打開CMD窗口,并在彈出的CMD窗口中使用Java命令運(yùn)行chapter01-0.0.1-SNAPSHOT.jar。2.運(yùn)行JAR包1.5.1

打包為JAR包并運(yùn)行JAR包運(yùn)行后,可以對(duì)項(xiàng)目進(jìn)行訪問(wèn),以測(cè)試打包后的效果,在瀏覽器中訪問(wèn)http://localhost:8080/first。2.運(yùn)行JAR包1.5.2打包為WAR包并運(yùn)行先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解將SpringBoot項(xiàng)目打包為WAR包并運(yùn)行,能夠?qū)pringBoot項(xiàng)目打包為WAR包并部署到Web容器中運(yùn)行1.5.2打包為WAR包并運(yùn)行雖然通過(guò)SpringBoot內(nèi)嵌的Tomcat可以將項(xiàng)目打成JAR包后直接運(yùn)行,但每個(gè)JAR包中都會(huì)包含獨(dú)立的Web容器,對(duì)服務(wù)器的使用消耗會(huì)比較大。當(dāng)想要在一個(gè)Web容器中運(yùn)行多個(gè)項(xiàng)目時(shí),可以把每個(gè)項(xiàng)目打包成一個(gè)WAR包,然后部署到Web容器中運(yùn)行。下面,以打包c(diǎn)hapter01-maven項(xiàng)目為例,將SpringBoot項(xiàng)目打包為WAR包并運(yùn)行。1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包(1)聲明打包方式為war。默認(rèn)情況下創(chuàng)建的SpringBoot項(xiàng)目打包方式為jar,要將項(xiàng)目打包為WAR包,需要在項(xiàng)目的pom.xml文件中聲明當(dāng)前項(xiàng)目的打包方式為war。打開chapter01-maven項(xiàng)目的pom.xml文件,使用<packaging>標(biāo)簽聲明項(xiàng)目打包方式為war。<groupId>com.itheima</groupId><artifactId>chapter01-maven</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging>1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包(2)排除內(nèi)置Tomcat。SpringBoot為項(xiàng)目提供了內(nèi)嵌的Tomcat服務(wù)器,使用外部的Tomcat時(shí),需要在pom.xml文件中排除內(nèi)置的Tomcat。<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>1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包(3)添加Tomcat依賴。排除內(nèi)置的Tomcat后,需要在pom.xml文件中手動(dòng)添加Tomcat的依賴,以便在后續(xù)開發(fā)中使用對(duì)應(yīng)的API。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><!--僅在編譯和測(cè)試階段使用,不會(huì)被打包--><scope>provided</scope></dependency>1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包(4)添加插件。在項(xiàng)目的pom.xml文件中定義打包插件,以及項(xiàng)目打包后包的名稱。<build><finalName>springboot-war</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包(5)修改SpringBoot啟動(dòng)類。SpringBoot啟動(dòng)項(xiàng)目的方式有很多種,使用外置Tomcat時(shí),默認(rèn)啟動(dòng)類需要繼承SpringBootServletInitializer類,并重寫configure()方法。修改后的SpringBoot啟動(dòng)類如文件1-8所示。文件1-8Chapter01MavenApplication.java源代碼1.5.2打包為WAR包并運(yùn)行1.打包為可執(zhí)行的WAR包使用IDEA的Maven工具欄中的命令打包項(xiàng)目,將chapter01-maven項(xiàng)目進(jìn)行打包。1.5.2打包為WAR包并運(yùn)行2.運(yùn)行WAR包將打包好的WAR包拷貝到本地Tomcat安裝目錄下的webapps文件夾下,在CMD窗口中執(zhí)行Tomcat安裝目錄下bin目錄中的startup.bat命令啟動(dòng)Tomcat。1.5.2打包為WAR包并運(yùn)行2.運(yùn)行WAR包在瀏覽器中訪問(wèn)http://localhost:8080/springboot-web/first。多學(xué)一招Tomcat啟動(dòng)失敗和控制臺(tái)亂碼1.Tomcat啟動(dòng)失敗在CMD窗口執(zhí)行startup.bat命令啟動(dòng)Tomcat時(shí),可能不能正常啟動(dòng)Tomcat,并出現(xiàn)響應(yīng)的提示信息。JRE_HOME環(huán)境變量沒有正確定義。對(duì)此,可以在計(jì)算機(jī)的環(huán)境變量中新增一個(gè)名稱為JRE_HOME的環(huán)境變量,變量值設(shè)置為JDK的安裝路徑即可。多學(xué)一招Tomcat啟動(dòng)失敗和控制臺(tái)亂碼2.Tomcat控制臺(tái)輸出亂碼控制臺(tái)輸出亂碼通常是編碼不一致導(dǎo)致的。打開Tomcat安裝目錄conf文件夾下的perties文件,將文件中“java.util.logging.ConsoleHandler.encoding”的值修改為GBK即可。本章小結(jié)本章主要對(duì)SpringBoot開發(fā)入門知識(shí)進(jìn)行了講解。首先講解了SpringBoot概述;然后講解了Spring

Boot入門案例,并結(jié)合入門案例對(duì)SpringBoot的原理進(jìn)行了解析;接著講解了單元測(cè)試和熱部署;最后講解了SpringBoot項(xiàng)目的打包和運(yùn)行。通過(guò)本章的學(xué)習(xí),希望大家可以對(duì)SpringBoot有一個(gè)初步認(rèn)識(shí),為后續(xù)學(xué)習(xí)SpringBoot做好鋪墊。本章小結(jié)第2章SpringBoot配置《SpringBoot企業(yè)級(jí)開發(fā)教程(第2版)》學(xué)習(xí)目標(biāo)/Target掌握perties配置文件,能夠在perties配置文件中正確配置數(shù)據(jù)掌握application.yml配置文件,能夠在application.yml配置文件中正確配置數(shù)據(jù)掌握@Value注解,能夠使用@Value注解為Bean的屬性綁定配置數(shù)據(jù)熟悉Environment對(duì)象,能夠使用Environment對(duì)象獲取全局配置文件中的屬性學(xué)習(xí)目標(biāo)/Target掌握@ConfigurationProperties注解,能夠使用@ConfigurationProperties注解為Bean的屬性綁定配置數(shù)據(jù)了解@Value和@ConfigurationProperties對(duì)比分析,能夠說(shuō)出@Value和@ConfigurationProperties的主要區(qū)別掌握引入配置文件,能夠使用@PropertySource注解和@ImportResource注解引入配置文件掌握定義配置類,能夠使用@Configuration注解定義配置類學(xué)習(xí)目標(biāo)/Target掌握多文件中配置Profile,能夠在多文件中配置Profile以實(shí)現(xiàn)多環(huán)境配置熟悉@Profile注解,能夠正確使用@Profile注解進(jìn)行多環(huán)境配置熟悉單一文件中配置Profile,能夠在單一文件中配置Profile以實(shí)現(xiàn)多環(huán)境配置章節(jié)概述/SummarySpringBoot極大地簡(jiǎn)化了Spring應(yīng)用的開發(fā),尤其是SpringBoot的自動(dòng)配置功能,該功能使項(xiàng)目即使不進(jìn)行任何配置,也能順利運(yùn)行。當(dāng)用戶想要根據(jù)自身需求覆蓋SpringBoot的默認(rèn)配置時(shí),需要使用配置文件修改SpringBoot的默認(rèn)配置。本章將對(duì)SpringBoot的配置進(jìn)行講解。目錄/Contents2.12.2全局配置文件配置綁定2.3引入配置文件和定義配置類2.4Profile全局配置文件2.12.1

全局配置文件全局配置文件能夠?qū)σ恍┠J(rèn)配置值進(jìn)行修改。SpringBoot默認(rèn)使用的全局配置文件有perties和application.yml,SpringBoot啟動(dòng)時(shí)會(huì)自動(dòng)讀取這兩個(gè)文件中的配置,如果文件中存在與默認(rèn)自動(dòng)配置相同的配置信息,則覆蓋默認(rèn)的配置信息。下面對(duì)全局配置文件進(jìn)行講解。2.1.1

perties配置文件先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握perties配置文件,能夠在perties配置文件中正確配置數(shù)據(jù)2.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.1.1

perties配置文件1.字面量類型屬性字面量是指單個(gè)的不可拆分的值,例如:數(shù)字、字符串、布爾值等。在perties文件中配置字面量的屬性時(shí),直接將字面量作為Value寫在鍵值對(duì)中即可,且默認(rèn)情況下字符串是不需要使用單引號(hào)或雙引號(hào)進(jìn)行修飾的。address=beijingage=132.1.1

perties配置文件1.字面量類型屬性如果需要配置的屬性為對(duì)象的屬性,可以通過(guò)“對(duì)象名.屬性名”的方式指定屬性的鍵。對(duì)象中可能包含多個(gè)屬性,在perties文件中為對(duì)象的屬性賦值時(shí),一個(gè)屬性對(duì)應(yīng)一對(duì)鍵值對(duì)。user.username=lisiuser.age=182.1.1

perties配置文件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.1.1

perties配置文件3.集合類型屬性在perties文件中也可以配置集合類型的屬性,下面分別演示配置List、Set、Map的集合類型屬性。#配置List:方式一user.subject=Chinese,English,Math#配置List:方式二user.subject[0]=Chineseuser.subject[1]=Englishuser.subject[2]=Math2.1.1

perties配置文件3.集合類型屬性#配置Setuser.salary=120,230#配置Map方式一user.order.1001=cookieuser.order.1002=cake#配置Map方式二user.order[1001]=cookieuser.order[1002]=cake2.1.2

application.yml配置文件先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握application.yml配置文件,能夠在application.yml配置文件中正確配置數(shù)據(jù)2.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文件的后綴名為.yml或.yaml,編寫時(shí)需要遵循如下規(guī)則。使用縮進(jìn)表示層級(jí)關(guān)系。

縮進(jìn)時(shí)不允許使用Tab鍵,只允許使用空格??s進(jìn)的空格數(shù)不重要,但同級(jí)元素必須左側(cè)對(duì)齊。

大小寫敏感。2.1.2

application.yml配置文件1.字面量類型屬性字面量是指單個(gè)的,不可拆分的值,例如:數(shù)字、字符串、布爾值等。在perties文YAML中,使用“Key:Value”的形式表示一對(duì)鍵值對(duì),其中Value前面有一個(gè)空格,并且該空格不能省略。在配置字面量類型的屬性時(shí),直接將字面量作為Value直接寫在鍵值對(duì)中即可,且默認(rèn)情況下字符串是不需要使用單引號(hào)或雙引號(hào)的。address:beijingage:132.1.2

application.yml配置文件1.字面量類型屬性如果需要配置的屬性為對(duì)象的屬性,配置的方式有縮進(jìn)式和行內(nèi)式兩種。#縮進(jìn)式consumer:username:lisiage:18#行內(nèi)式consumer:{username:lisi,age:18}2.1.2

application.yml配置文件2.數(shù)組類型和單列集合屬性當(dāng)YAML配置文件中配置的屬性為數(shù)組類型或單列集合時(shí),也可以使用縮進(jìn)式寫法和行內(nèi)式寫法。consumer:hobby:-play-read-sleepconsumer:hobby:[play,read,sleep]or縮進(jìn)式行內(nèi)式2.1.2

application.yml配置文件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.22.2配置綁定使用SpringBoot全局配置文件配置屬性時(shí),如果配置的屬性是SpringBoot內(nèi)置的屬性(如服務(wù)端口server.port),那么SpringBoot會(huì)自動(dòng)掃描并讀取配置文件中的屬性值并覆蓋原有默認(rèn)的屬性值。如果配置的屬性是用戶自定義的屬性,可以通過(guò)Java代碼去讀取該配置屬性,并且把屬性綁定到Bean。在SpringBoot項(xiàng)目中可以通過(guò)@Value、Environment對(duì)象和@ConfigurationProperties對(duì)配置屬性進(jìn)行綁定,下面分別對(duì)這三種方式實(shí)現(xiàn)配置綁定進(jìn)行講解。2.2.1

@Value注解先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握@Value注解,能夠使用@Value注解為Bean的屬性綁定配置數(shù)據(jù)2.2.1

@Value注解@Value注解是由Spring框架提供的,SpringBoot框架從Spring框架中對(duì)@Value注解進(jìn)行了默認(rèn)繼承,通過(guò)@Value可以將配置文件中的屬性綁定到Bean對(duì)象對(duì)應(yīng)的屬性。@ComponentpublicclassPerson{@Value("${person.id}")privateintid;}將配置文件中屬性person.id的值動(dòng)態(tài)注入到id屬性2.2.1

@Value注解下面通過(guò)案例演示在SpringBoot項(xiàng)目中使用@Value綁定全局配置文件中的屬性。文件2-1Consumer.java源代碼(1)創(chuàng)建實(shí)體類。在IDEA中創(chuàng)建一個(gè)SpringBoot項(xiàng)目,在項(xiàng)目的java文件夾下創(chuàng)建類包c(diǎn)om.itheima.domain,并在該類包下創(chuàng)建一個(gè)消費(fèi)者實(shí)體類Consumer,在該類上使用@Component進(jìn)行標(biāo)注,并在屬性上使用@Value注解注入配置文件中的屬性,具體如文件2-1所示。2.2.1

@Value注解文件2-2application.yml源代碼(2)添加配置信息。在項(xiàng)目的resource文件夾下創(chuàng)建配置文件application.yml,在配置文件中添加屬性信息,具體如文件2-2所示。2.2.1

@Value注解文件2-3Chapter02ApplicationTests.java源代碼(3)創(chuàng)建測(cè)試類。在項(xiàng)目test文件夾下,創(chuàng)建類包c(diǎn)om.itheima的類包,在該包下創(chuàng)建測(cè)試類Chapter02ApplicationTests,在該測(cè)試類中注入Consumer對(duì)象,并新增一個(gè)測(cè)試方法進(jìn)行輸出測(cè)試,具體代碼如文件2-3所示。2.2.1

@Value注解(4)測(cè)試程序效果。運(yùn)行測(cè)試方法wiredTest()。2.2.2Environment對(duì)象先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉Environment對(duì)象,能夠使用Environment對(duì)象獲取全局配置文件中的屬性2.2.2Environment對(duì)象使用@Value注解時(shí),將該注解標(biāo)注在Spring管控的Bean的屬性名上方,就可以將某個(gè)數(shù)據(jù)綁定到Bean對(duì)象的屬性。當(dāng)Bean的屬性比較多且這些屬性都需要綁定配置的數(shù)據(jù)時(shí),操作起來(lái)就比較煩瑣。為此,SpringBoot提供了一個(gè)對(duì)象Environment,項(xiàng)目啟動(dòng)時(shí)能夠?qū)⑴渲梦募械乃袛?shù)據(jù)都封裝到該對(duì)象中,這樣就不需要手動(dòng)對(duì)配置數(shù)據(jù)進(jìn)行綁定。2.2.2Environment對(duì)象使用Environment對(duì)象獲取配置文件的數(shù)據(jù)時(shí),不需要在提供其他實(shí)體類。在文件2-3的Chapter02ApplicationTests類中,通過(guò)@Autowired注入Environment對(duì)象,并新增測(cè)試方法evnTest(),在測(cè)試方式中通過(guò)Environment對(duì)象獲取配置文件中的屬性。@AutowiredprivateEnvironmentenv;@TestvoidevnTest(){System.out.println("consumer.username="+env.getProperty("consumer.username"));System.out.println("consumer.age="+env.getProperty("consumer.age"));System.out.println("consumer.hobby="+env.getProperty("consumer.hobby"));System.out.println("consumer.subject="+env.getProperty("consumer.subject"));}getProperty()方法獲取封裝到Environment對(duì)象中封裝的配置文件的數(shù)據(jù)2.2.2Environment對(duì)象運(yùn)行測(cè)試方法evnTest(),輸出封裝到Environment對(duì)象中的配置文件的數(shù)據(jù)。2.2.3@ConfigurationProperties注解先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握@ConfigurationProperties注解,能夠使用@ConfigurationProperties注解為Bean的屬性綁定配置數(shù)據(jù)2.2.3@ConfigurationProperties注解Java是面向?qū)ο蟮恼Z(yǔ)言,很多情況下,人們習(xí)慣將具有相同特性的一組數(shù)據(jù)封裝到一個(gè)對(duì)象中,SpringBoot中就提供了這樣的注解。SpringBoot的@ConfigurationProperties注解可以

可以將配置文件中的一組配置數(shù)據(jù)同時(shí)綁定到Bean中。下面通過(guò)案例演示在SpringBoot項(xiàng)目中使用@ConfigurationProperties注解綁定全局配置文件中的數(shù)據(jù)。2.2.3@ConfigurationProperties注解(1)修改實(shí)體類屬性的綁定方式。在文件2-1的Consumer類上使用@ConfigurationProperties注解進(jìn)行標(biāo)注,并且去除屬性上方標(biāo)注的@Value注解。@Component@ConfigurationProperties(prefix="consumer")publicclassCo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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)論