版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章SpringBoot開發(fā)入門《SpringBoot企業(yè)級開發(fā)教程(第2版)》學習目標/Target了解SpringBoot簡介,能夠簡述SpringBoot的發(fā)展過程了解SpringBoot的特性,能夠簡述SpringBoot的特性掌握SpringBoot入門案例,能夠使用SpringInitializr方式和Maven方式構(gòu)建SpringBoot項目學習目標/Target了解單元測試與熱部署,能夠?qū)pringBoot項目進行單元測試和熱部署熟悉SpringBoot項目打包和運行,能夠?qū)pringBoot項目打包為JAR包和WAR包并運行熟悉SpringBoot原理解析,能夠簡述SpringBoot起步依賴、自動配置和執(zhí)行流程的原理章節(jié)概述/SummarySpring是一個非常優(yōu)秀的組件管理容器,但是為了管理容器中的組件,使用Spring搭建JavaEE應用程序時往往需要進行大量的配置或注解,這些配置工作都屬于項目的基礎(chǔ)搭建,通常與業(yè)務功能無關(guān),并且不熟悉搭建過程的人員在配置時很容易出錯。為了簡化Spring應用的搭建和配置過程,SpringBoot應運而生。SpringBoot是一個基于Spring的全新開源框架,它可以簡化Spring應用的初始搭建和配置過程,使用更加簡單,功能更加豐富。目錄/Contents1.11.2SpringBoot概述SpringBoot入門案例1.3SpringBoot原理解析1.4單元測試與熱部署1.5SpringBoot項目打包和運行SpringBoot概述1.11.1.1
SpringBoot簡介先定一個小目標!
先定一個小目標!了解SpringBoot簡介,能夠簡述SpringBoot的發(fā)展過程1.1.1
SpringBoot簡介在SpringBoot框架出現(xiàn)之前,為了解決Java企業(yè)級應用開發(fā)笨重臃腫的問題,JavaEE最常用的框架是Spring。Spring是2003年興起的輕量級的Java開源框架,旨在簡化Java企業(yè)級開發(fā)。Spring框架是輕量級的,但它的配置卻是重量級的。早期版本的Spring專注于XML配置,開發(fā)一個程序需要配置各種XML配置文件。在Spring中使用注解開發(fā)逐漸占據(jù)了主流地位。SpringSpring4.x版本基本可以脫離XML配置文件進行項目開發(fā)。1.1.1
SpringBoot簡介Pivotal團隊在原有Spring框架的基礎(chǔ)上通過注解的方式進一步簡化了Spring框架的使用,并基于Spring框架開發(fā)了全新的SpringBoot框架。2014年4月正式推出了SpringBoot1.0版本,同時在2018年3月又推出了SpringBoot2.0版本。SpringBoot2.x版本在SpringBoot1.x版本的基礎(chǔ)上進行了諸多功能的改進和擴展,同時進行了大量的代碼重構(gòu)。1.1.1
SpringBoot簡介提升Spring開發(fā)者體驗的工具SpringBoot并不是替代Spring框架的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗的工具。構(gòu)建Spring項目SpringBoot框架本身并不提供Spring框架的核心特性以及擴展功能,它只是使構(gòu)建Spring應用變得簡單。開箱即用SpringBoot集成了大量常用的第三方庫配置,使用SpringBoot開發(fā)程序時,幾乎是開箱即用。約定優(yōu)于配置開發(fā)過程中大量使用約定優(yōu)于配置的思想來擺脫Spring框架中各種復雜的手動配置。SpringBoot1.1.1SpringBoot簡介隨著近幾年微服務開發(fā)的需求增長和火爆,如何快速、簡便地構(gòu)建一個準生產(chǎn)環(huán)境的Spring應用成為擺在開發(fā)者面前的難題,SpringBoot框架的出現(xiàn)恰好完美解決了這些問題,同時內(nèi)部還簡化了許多常用的第三方庫配置,使微服務開發(fā)更加便利,這也間接體現(xiàn)了SpringBoot框架的優(yōu)勢和學習SpringBoot的必要性。1.1.2
SpringBoot的特性先定一個小目標!
先定一個小目標!了解SpringBoot的特性,能夠簡述SpringBoot的特性1.1.2
SpringBoot的特性6.無須生成配置代碼和XML配置文件。4.提供了大量的自動化配置類或第三方類庫。5.提供生產(chǎn)就緒功能。1.可快速構(gòu)建獨立的Spring應用。3.提供固化的“starter”依賴,簡化構(gòu)建配置。2.直接嵌入Tomcat、Jetty和Undertow等Web容器,無須部署WAR文件。SpringBoot的特性SpringBoot入門案例1.21.2.1
環(huán)境準備先定一個小目標!
先定一個小目標!掌握SpringBoot入門案例環(huán)境準備,能夠獨立搭建SpringBoot入門案例所需要準備的環(huán)境1.2.1
環(huán)境準備SpringBoot2.7.6依賴SpringFramework5.3.24,而運行SpringFramework5.3.24需要Java8及以上版本進行支撐,在此選擇當前使用較為廣泛并運行較為穩(wěn)定的JDK11。1.JDKSpringBoot2.7.6官方聲明支持的項目構(gòu)建工具包括有Maven和Gradle,其中Maven的版本需要3.5及以上版本。在此采用Maven3.6.3對SpringBoot進行項目構(gòu)建管理。2.項目構(gòu)建工具業(yè)界較為常用有Eclipse和IntelliJIDEA,相比Eclipse而言,IntelliJIDEA的開發(fā)效率更高。在此選擇IntelliJIDEA的Ultimate2022.2.2進行項目開發(fā)。3.開發(fā)工具環(huán)境準備先定一個小目標!
先定一個小目標!掌握SpringBoot入門案例,能夠使用SpringInitializr方式構(gòu)建SpringBoot項目1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.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程序。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目啟動IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項目,在彈出的對話框中選擇左側(cè)“SpringInitializr”選項。ServerURL:初始化SpringBoot項目時SpringInitializr工具所在的服務器地址。Name:所創(chuàng)建項目的名稱。Location:所創(chuàng)建項目在本地存放的路徑。Language:所創(chuàng)建項目使用的開發(fā)語言。Type:使用的項目構(gòu)建工具。Group:項目的組名。Artifact:項目的名稱。Packagename:包名。JDK:項目使用的JDK。Packaging:項目打包的形式。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目填寫好項目的相應信息,其中項目打包方式為Jar。單擊“Next”按鈕,進入SpringBoot場景依賴選擇界面。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目項目中想要添加SpringMVC,可以勾選Web類別下的SpringWeb,創(chuàng)建項目時就會添加SpringWeb的依賴。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目Chapter01Application.java:項目的啟動類,在該類中可以定義啟動項目的方法。static:靜態(tài)資源文件夾。templates:模板頁面文件夾。perties:全局配置文件。pom.xml:Maven進行工作的主要配置文件。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目文件1-1Chapter01Application.java源代碼打開Chapter01Application.java,文件中的內(nèi)容如文件1-1所示。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目1.構(gòu)建SpringBoot項目文件1-2pom.xml源代碼打開項目的pom.xml文件,內(nèi)容如文件1-2所示。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目2.編寫SpringMVC控制器文件1-3HelloController.java源代碼在項目com.itheima.chapter01包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,并在該類中編寫處理請求的方法index(),具體如文件1-3所示。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目3.運行項目運行文件Chapter01Application.java,啟動程序。1.2.2
使用SpringInitializr方式構(gòu)建SpringBoot項目3.運行項目在瀏覽器上訪問http://localhost:8080/first。1.2.3
使用Maven方式構(gòu)建SpringBoot項目先定一個小目標!
先定一個小目標!掌握SpringBoot入門案例,能夠使用Maven方式構(gòu)建SpringBoot項目1.2.3
使用Maven方式構(gòu)建SpringBoot項目使用SpringInitializr方式構(gòu)建SpringBoot項目非常便捷,但是如果當前主機不能聯(lián)網(wǎng)的話,就無法自動下載項目所需的一些組件和依賴,導致這種方式無法正常使用。SpringBoot項目可以基于Maven構(gòu)建,如果構(gòu)建項目所需要使用的組件和依賴在本地Maven倉庫中已經(jīng)存在,則無須聯(lián)網(wǎng)也可以構(gòu)建SpringBoot項目。下面講解如何在IDEA中使用Maven方式構(gòu)建SpringBoot項目,并在項目中創(chuàng)建一個SpringMVC程序。1.2.3
使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目啟動IDEA,在IDEA歡迎界面依次選擇“Project”→“NewProject”創(chuàng)建項目,在彈出的對話框中選擇左側(cè)“MavenArchetype”選項。1.2.3
使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目單擊“MavenArchetype”選項左側(cè)界面最上方的“NewProject”創(chuàng)建一個新的Mave項目。單擊后進入“NewProject”選項對應的界面。1.2.3
使用Maven方式構(gòu)建SpringBoot項目1.構(gòu)建Maven項目設(shè)置好創(chuàng)建項目的信息后,單擊“Create”按鈕即可創(chuàng)建Maven項目。Maven項目創(chuàng)建好之后,會默認打開項目的pom.xml文件。1.2.3
使用Maven方式構(gòu)建SpringBoot項目2.添加項目依賴創(chuàng)建一般的Maven項目時,需要手動在pom.xml文件中插入對應的依賴信息。在此參照文件1-2插入項目繼承的工程依賴,以及SpringWeb和測試相關(guān)的依賴。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/></parent>項目繼承的父依賴1.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)的依賴1.2.3
使用Maven方式構(gòu)建SpringBoot項目在項目pom.xml文件中導入新依賴或修改其他內(nèi)容后,通常會自動更新而無須手動管理。但有些情況下,依賴文件可能還是無法自動加載,這時候就需要重新手動加載依賴文件,具體操作方法為:右鍵單擊項目名,選擇“Maven”→“Reloadproject”重新加載項目即可。小提示1.2.3
使用Maven方式構(gòu)建SpringBoot項目3.編寫程序啟動類在java文件夾下創(chuàng)建一個名稱為com.itheima.chapter01maven的包,在該包下參照文件1-1創(chuàng)建啟動類Chapter01MavenApplication,具體如文件1-4所示。文件1-4Chapter01MavenApplication.java源代碼1.2.3
使用Maven方式構(gòu)建SpringBoot項目4.編寫SpringMVC控制器在項目com.itheima.chapter01maven包下創(chuàng)建名稱為controller的包,在該包下創(chuàng)建控制器類HelloController,該類中代碼與文件1-3一致即可。1.2.3
使用Maven方式構(gòu)建SpringBoot項目5.運行項目運行文件Chapter01MavenApplication.java,啟動程序。1.2.3
使用Maven方式構(gòu)建SpringBoot項目5.運行項目在瀏覽器中訪問http://localhost:8080/first。SpringBoot原理解析1.31.3
SpringBoot原理解析通過SpringBoot入門案例的實現(xiàn),相信能夠感受到,與使用Spring整合SpringMVC進行開發(fā)時需要設(shè)置煩瑣的依賴和配置信息相比,SpringBoot整合SpringMVC只需添加少量的依賴信息即可,開發(fā)過程也比較簡潔。SpringBoot項目中可以簡化依賴配置和常用工程的相關(guān)配置信息,這主要依靠它的起步依賴和自動配置。下面結(jié)合SpringBoot入門案例對SpringBoot的起步依賴、自動配置和執(zhí)行流程的原理進行分析和講解。1.3.1
起步依賴先定一個小目標!
先定一個小目標!熟悉SpringBoot起步依賴,能夠簡述SpringBoot起步依賴的原理1.3.1
起步依賴起步依賴本質(zhì)上是一個Maven項目對象模型,該模型中定義了對其它庫的傳遞依賴,SpringBoot提供了眾多起步依賴來降低項目依賴的復雜度。在SpringBoot入門案例中,項目的pom.xml文件中主要引入了兩個起步依賴,分別是spring-boot-starter-parent和spring-boot-starter-web。1.3.1
起步依賴1.spring-boot-starter-parent依賴spring-boot-starter-parent中定義了很多常見技術(shù)的版本信息,組合成一套最優(yōu)搭配的技術(shù)版本??梢栽贗DEA中按住Ctrl單擊spring-boot-starter-paren進入對應的源碼文件中查看。2.spring-boot-starter-web依賴spring-boot-starter-web就是使用SpringMVC構(gòu)建Web應用程序的啟動器。不僅包含SpringMVC的依賴信息和Spring整合SpringMVCWeb開發(fā)的依賴信息,還包含了其他的一些依賴信息。1.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,常被作為父依賴spring-boot-starter-logging提供Logging相關(guān)的日志功能spring-boot-starter-thymeleaf使用Thymeleaf視圖構(gòu)造MVCWeb應用程序的啟動器spring-boot-starter-web使用Spring
MVC構(gòu)建Web,包括RESTful應用程序,使用Tomcat作為默認的嵌入式容器的啟動器spring-boot-starter-test支持常規(guī)的測試依賴,包括Junit、Hamcrest、Mockito和spring-test模塊spring-boot-starter-jdbc結(jié)合JDBC和HikariCP連接池的啟動器,對數(shù)據(jù)源自動裝配,并提供JdbcTemplate簡化數(shù)據(jù)庫操作常見的SpringBoot應用程序啟動器1.3.1
起步依賴名稱描述spring-boot-starter-data-jpa使用SpringJPA與Hibernate的啟動器spring-boot-starter-data-redisRediskey-value數(shù)據(jù)存儲和SpringDataRedis與Jedis客戶端的啟動器spring-boot-starter-log4j2提供Log4j2相關(guān)的日志功能spring-boot-starter-mail提供郵件相關(guān)功能spring-boot-starter-activemq使用ApacheActiveMQ的JMS啟動器spring-boot-starter-data-mongodb使用MongoDB面向文檔的數(shù)據(jù)庫和SpringDataMongoDB的啟動器spring-boot-starter-actuator提供應用監(jiān)控與監(jiān)控相關(guān)的功能spring-boot-starter-security使用Spring
Security的啟動器spring-boot-starter-dubbo提供Dubbo框架的相關(guān)功能常見的SpringBoot應用程序啟動器1.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文件中引入這些第三方的啟動器時,需要自行配置對應的依賴版本號。1.3.1
起步依賴spring-boot-starter-parent和普通的starter都使SpringBoot項目簡化了配置,但是他們兩個的功能卻不相同。spring-boot-starter-parent:定義了很多個常見組件或框架的依賴版本號,組合成一套最優(yōu)搭配的技術(shù)版本,更便于統(tǒng)一管理依賴的版本,且減少了依賴的沖突。普通的starter:在坐標中定了若干個坐標,減少依賴配置的代碼量。1.3.2自動配置先定一個小目標!
先定一個小目標!熟悉SpringBoot自動配置,能夠簡述SpringBoot自動配置的原理1.3.2自動配置SpringBoot采用約定大于配置的設(shè)計思想,將SpringBoot開發(fā)過程中可能會遇到的配置信息提前配置好,寫在自動配置的JAR包中。項目啟動時會自動檢測項目類路徑下所有的依賴JAR包,將檢測到的Bean注冊到Spring容器中,并根據(jù)檢測的依賴進行自動配置。1.3.2
自動配置@SpringBootConfiguration標注當前類是一個配置類,它是一個復合注解。1.@SpringBootConfiguration@EnableAutoConfiguration可以開啟自動配置,它也是一個復合注解。2.@EnableAutoConfiguration@ComponentScan注解是一個組件包掃描器,其主要作用是掃描指定包及其子包下所有注解類文件作為Spring容器的組件使用。3.@ComponentScan@SpringBootApplication注解1.3.2
自動配置1.
@SpringBootConfiguration查看@SpringBootConfiguration的源碼@SpringBootConfiguration是@Configuration的派生注解,擁有@Configuration注解的功能。@Configuration是@Component的派生注解,所以被@SpringBootApplication標注的類可以被掃描到Spring的IoC容器中。1.3.2
自動配置2.@EnableAutoConfiguration@EnableAutoConfiguration主要通過代碼中的@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})實現(xiàn)自動配置。@AutoConfigurationPackage:主要作用是獲取項目啟動類所在根目錄,從而指定組件掃描器掃描的包位置。@Import({AutoConfigurationImportSelector.class}:導入AutoConfigurationImportSelector類,該類中提供了一個獲取自動配置的方法getAutoConfigurationEntry(),用于篩選出當前項目環(huán)境需要啟動的自動配置類,從而實現(xiàn)當前項目運行所需的自動配置環(huán)境。查看@EnableAutoConfiguration的源碼1.3.2
自動配置@Import導入了AutoConfigurationPackages.Registrar類,Registrar類屬于AutoConfigurationPackages類中的靜態(tài)內(nèi)部類,該類中提供了批量注冊組件到Spring容器的方法。查看@AutoConfigurationPackage的源碼2.@EnableAutoConfiguration1.3.2
自動配置(1)從SpringBoot自動配置JAR包的META-INF/spring.factories和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中獲取所有候選自動配置類。(2)根據(jù)項目pom.xml文件中加入的依賴篩選出最終符合當前項目運行環(huán)境對應的自動配置類。查看@Import({AutoConfigurationImportSelector.class})的源碼2.@EnableAutoConfiguration1.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的類。1.3.3
執(zhí)行流程先定一個小目標!
先定一個小目標!熟悉SpringBoot執(zhí)行流程,能夠基于SpringBoot入門案例簡述SpringBoot的執(zhí)行流程1.3.3
執(zhí)行流程SpringBoot入門案例啟動類的main()方法只有一行代碼,使用SpringApplication類調(diào)用run()方法,執(zhí)行該行代碼時,就啟動了整個SpringBoot項目。為了進一步了解SpringBoot的啟動原理,下面基于SpringBoot入門案例講解SpringBoot的執(zhí)行流程。1.3.3
執(zhí)行流程查看SpringApplication調(diào)用的run()方法的源碼SpringApplication的run()方法中調(diào)用了另一個重載的run()方法,被調(diào)用的重載run()方法內(nèi)部執(zhí)行了兩個操作,分別是創(chuàng)建SpringApplication實例和調(diào)用run()方法。1.3.3
執(zhí)行流程創(chuàng)建SpringApplication實例主要執(zhí)行了如下操作。(1)初始化資源加載器,此處將資源加載器置空。(2)初始化加載資源類集合。(3)推斷當前Web應用類型。(4)設(shè)置應用上下文初始化器。(5)設(shè)置監(jiān)聽器。(6)推斷主應用類。1.創(chuàng)建SpringApplication實例1.3.3
執(zhí)行流程run()方法的核心代碼執(zhí)行內(nèi)容。(1)創(chuàng)建啟動上下文對象。(2)獲取并啟動運行監(jiān)聽器。(3)將應用程序參數(shù)封裝為ApplicationArguments類型對象。(4)配置環(huán)境信息ConfigurableEnvironment的基礎(chǔ)的配置信息。(5)配置需要忽略的Bean信息。(6)創(chuàng)建應用程序上下文對象,并設(shè)置上下文對象的應用程序啟動器。(7)對應用上下文環(huán)境進行準備。(8)刷新應用程序上下文,初始化IoC容器里面的Bean。(9)調(diào)用了監(jiān)聽器的started()方法,通知監(jiān)聽器上下文啟動完成。2.調(diào)用run()方法查看run()方法執(zhí)行的過程單元測試與熱部署1.41.4.1
單元測試先定一個小目標!
先定一個小目標!了解單元測試,能夠在SpringBoot項目中進行Web環(huán)境模擬測試和業(yè)務組件測試1.4.1
單元測試單元測試是針對一個獨立的工作單元進行正確性驗證的測試,對程序開發(fā)來說非常重要,通過單元測試不僅能增強程序的健壯性,而且為程序的重構(gòu)提供了依據(jù)。SpringBoot為項目的單元測試提供了很好的支持。在項目中添加測試依賴啟動器后,可以編寫相關(guān)測試代碼對SpringBoot項目中相關(guān)功能進行單元測試。根據(jù)測試時候是否需要啟動Web服務器,可以將單元測試分為Web環(huán)境模擬測試和業(yè)務組件測試。1.4.1
單元測試SpringBoot提供了@SpringBootTest用于修飾單元測試用例類。通過@SpringBootTest注解的webEnvironment屬性可以設(shè)置在測試用例中啟動Web環(huán)境。webEnvironment屬性可以設(shè)置的值有以下4個。MOCK:為webEnvironment屬性的默認值,會加載一個WebApplicationContext并提供一個模擬servlet環(huán)境,屬于適配性的配置,根據(jù)當前的設(shè)置確認是否啟動Web環(huán)境,例如,使用了Servlet的API就會啟動Web環(huán)境。DEFINED_PORT:加載一個EmbeddedWebApplicationContext并提供一個真正的servlet環(huán)境,使用自定義的端口作為Web服務器端口。RANDOM_PORT:加載一個EmbeddedWebApplicationContext并提供一個真正的servlet環(huán)境,使用隨機端口作為Web服務器端口。NONE:使用SpringApplication加載ApplicationContext,但不啟動Web環(huán)境。1.Web環(huán)境模擬測試1.4.1
單元測試在項目chapter01測試文件夾下的com.itheima.chapter01包下編寫測試用例類WebTest,在該類中啟動Web環(huán)境,并使用隨機端口作為Web服務器端口。在測試用例類上使用@AutoConfigureMockMvc注解對Web虛擬調(diào)用功能開啟,具體如文件1-5所示。文件1-5WebTest.java源代碼1.Web環(huán)境模擬測試1.4.1
單元測試選中單元測試方法testWeb(),鼠標右鍵單擊“Run‘testWeb()’”選項啟動測試方法。1.Web環(huán)境模擬測試1.4.1
單元測試當只需測試Service層或DAO層等業(yè)務組件時,則不需要啟動Web服務器,測試方法直接調(diào)用被測試組件的方法。在項目chapter01的com.itheima.chapter01包下創(chuàng)建名稱為service的包,在該包下創(chuàng)建類HelloService,具體如文件1-6所示。文件1-6HelloService.java源代碼2.業(yè)務組件測試1.4.1
單元測試定義測試用例類。在項目chapter01測試文件夾下的com.itheima.chapter01包下編寫測試用例類ServiceTest,在該類中不啟動Web環(huán)境,具體如文件1-7所示。文件1-7ServiceTest.java源代碼2.業(yè)務組件測試1.4.1
單元測試選中單元測試方法testService(),右鍵單擊“Run‘testService()’”選項啟動測試方法。2.業(yè)務組件測試1.4.2熱部署先定一個小目標!
先定一個小目標!了解熱部署,能夠在IDEA中實現(xiàn)SpringBoot項目的熱部署1.4.2熱部署在開發(fā)過程中,可能會不斷地修改業(yè)務代碼,每次修改之后想要測試最新的效果往往需要重啟服務,這種重復的啟動操作極大地降低了程序開發(fā)效率。熱部署指的是不用重啟服務,服務器會自己悄悄地把更新后的程序重新加載一遍。為了提高開發(fā)效率。SpringBoot框架提供了進行熱部署的依賴,用于進行項目熱部署。下面在chapter01項目基礎(chǔ)上講解如何進行熱部署。1.4.2熱部署1.添加熱部署依賴<!--熱部署依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>在SpringBoot項目進行熱部署測試之前,需要先在項目的pom.xml文件中添加熱部署依賴。1.4.2熱部署2.設(shè)置啟動熱部署在IDEA的菜單欄中依次選擇“File”→“Settings”,進入IDEA的設(shè)置對話框,然后選擇“Build,Execution,Deployment”的“Compiler”選項。在右側(cè)勾選“Buildprojectautomatically”選項將項目設(shè)置為自動編譯,然后單擊“Apply”→“OK”按鈕保存設(shè)置。1.4.2熱部署2.設(shè)置啟動熱部署IDEA的設(shè)置對話框中,選中“AdvancedSettings”選項。在右側(cè)勾選“Compiler”下的“Allowauto-maketostartevenifdevelopedapplicationiscurrentlyrunning”選項,允許自動啟動當前正在運行的應用程序,然后單擊“Apply”→“OK”按鈕保存設(shè)置。1.4.2熱部署啟動chapter01項目,在瀏覽器中訪問“http://localhost:8080/first”。3.熱部署效果測試1.4.2熱部署啟動chapter01項目,在瀏覽器訪問“http://localhost:8080/first”。為了測試配置的熱部署是否有效,接下來,在不關(guān)閉當前項目的情況下,將HelloController類中index()方法的返回值修改為“WelcometoSpringBootApplication!---developed”。5秒后刷新瀏覽器頁面。3.熱部署效果測試SpringBoot項目打包和運行1.51.5
SpringBoot項目打包和運行在實際開發(fā)中,通常項目完成后不會將源代碼公布給所有人,而是將項目和其依賴的組件組織成一個可執(zhí)行文件分發(fā)到目標系統(tǒng)上運行或者交付給其他人使用,這個組織的過程也稱為打包。項目打包后在其他環(huán)境可以很方便的運行,SpringBoot項目打包時通常會被創(chuàng)建為可執(zhí)行的JAR包或WAR包,這兩種包內(nèi)部的文件結(jié)構(gòu)不同,其運行的方式也不相同。下面,分別對這兩種方式的打包和運行進行講解。1.5.1
打包為JAR包并運行先定一個小目標!
先定一個小目標!熟悉將SpringBoot項目打包為JAR包并運行,能夠獨立將SpringBoot項目打包為可執(zhí)行的JAR包并運行1.5.1
打包為JAR包并運行SpringBoot應用內(nèi)嵌了Web服務器,所以基于SpringBoot開發(fā)的Web應用也可以獨立運行,無須部署到其他Web服務器中。下面,以打包chapter01項目為例,將SpringBoot項目打包為可執(zhí)行的JAR包并運行。1.5.1
打包為JAR包并運行1.打包為可執(zhí)行的JAR包(1)添加Maven打包插件。SpringBoot程序是基于Maven創(chuàng)建的,在對SpringBoot項目進行打包前,需要在項目pom.xml文件中加入Maven打包插件。<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>1.5.1
打包為JAR包并運行1.打包為可執(zhí)行的JAR包(2)使用IDEA進行打包。clean命令:可以清除所有在構(gòu)建過程中生成的文件。test命令:可以使用合適的單元測試框架來測試編譯的源代碼。package命令:可以完成項目編譯、單元測試、打包功能。打包時候跳過測試階段1.5.1
打包為JAR包并運行如果打包成功會在項目的target文件夾下創(chuàng)建項目對應的可執(zhí)行JAR包。1.打包為可執(zhí)行的JAR包1.5.1
打包為JAR包并運行一個可執(zhí)行的JAR包可以由JVM
直接執(zhí)行而無須事先提取文件或者設(shè)置類路徑。對此可以直接使用Java命令運行可執(zhí)行的JAR包。2.運行JAR包java–jarJAR包名稱運行JAR包的命令的語法格式1.5.1
打包為JAR包并運行運行JAR包時可以選擇在IDEA中或者在CMD窗口中執(zhí)行,這兩種方式?jīng)]有什么區(qū)別,這里選擇在CMD窗口中執(zhí)行。在本地打開項目的target文件夾。2.運行JAR包1.5.1
打包為JAR包并運行項目的target文件夾的地址欄中輸出“CMD”后按下“Enter”鍵,在當前文件夾路徑下打開CMD窗口,并在彈出的CMD窗口中使用Java命令運行chapter01-0.0.1-SNAPSHOT.jar。2.運行JAR包1.5.1
打包為JAR包并運行JAR包運行后,可以對項目進行訪問,以測試打包后的效果,在瀏覽器中訪問http://localhost:8080/first。2.運行JAR包1.5.2打包為WAR包并運行先定一個小目標!
先定一個小目標!了解將SpringBoot項目打包為WAR包并運行,能夠?qū)pringBoot項目打包為WAR包并部署到Web容器中運行1.5.2打包為WAR包并運行雖然通過SpringBoot內(nèi)嵌的Tomcat可以將項目打成JAR包后直接運行,但每個JAR包中都會包含獨立的Web容器,對服務器的使用消耗會比較大。當想要在一個Web容器中運行多個項目時,可以把每個項目打包成一個WAR包,然后部署到Web容器中運行。下面,以打包chapter01-maven項目為例,將SpringBoot項目打包為WAR包并運行。1.5.2打包為WAR包并運行1.打包為可執(zhí)行的WAR包(1)聲明打包方式為war。默認情況下創(chuàng)建的SpringBoot項目打包方式為jar,要將項目打包為WAR包,需要在項目的pom.xml文件中聲明當前項目的打包方式為war。打開chapter01-maven項目的pom.xml文件,使用<packaging>標簽聲明項目打包方式為war。<groupId>com.itheima</groupId><artifactId>chapter01-maven</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging>1.5.2打包為WAR包并運行1.打包為可執(zhí)行的WAR包(2)排除內(nèi)置Tomcat。SpringBoot為項目提供了內(nèi)嵌的Tomcat服務器,使用外部的Tomcat時,需要在pom.xml文件中排除內(nèi)置的Tomcat。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物料搬運設(shè)備的能效提升與節(jié)能減排-洞察分析
- 營養(yǎng)素對頸部燒傷后傷口愈合的促進-洞察分析
- 文化金融產(chǎn)品體系構(gòu)建-洞察分析
- 網(wǎng)紅經(jīng)濟效應評估-洞察分析
- 《SIYB中國項目介紹》課件
- 勤儉節(jié)約的精彩講話稿(12篇)
- 辦公空間設(shè)計的多元素文化融合與創(chuàng)新
- 健康飲食文化在家庭教育中的傳播與影響研究
- 2025簡單采購合同范本
- 關(guān)于孩子在競爭環(huán)境下自信心建立的研究
- 風險企業(yè)監(jiān)測方案
- 基礎(chǔ)團務知識培訓
- 臨床研究的重要性與培訓推動醫(yī)療行業(yè)不斷創(chuàng)新
- 戴煒棟語言學練習題
- 英漢互譯單詞練習打印紙
- 消防設(shè)備電源監(jiān)控系統(tǒng)調(diào)試報告表
- 改革開放簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學
- 單側(cè)甲狀腺次全切除術(shù)后護理查房
- 新時代高職英語(基礎(chǔ)模塊)2 Unit3
- 房地產(chǎn)運營管理工作思路
- 危險化學品生產(chǎn)企業(yè)安全生產(chǎn)管理制度編制導則
評論
0/150
提交評論