Springboot+SpringCloud實戰(zhàn)(微課版)15-第十五章_第1頁
Springboot+SpringCloud實戰(zhàn)(微課版)15-第十五章_第2頁
Springboot+SpringCloud實戰(zhàn)(微課版)15-第十五章_第3頁
Springboot+SpringCloud實戰(zhàn)(微課版)15-第十五章_第4頁
Springboot+SpringCloud實戰(zhàn)(微課版)15-第十五章_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第十五章SpringCloud項目實戰(zhàn)學習目標熟悉電商項目基本功能。熟悉項目架構搭建與數(shù)據(jù)庫設計。熟悉SpringBoot框架和微服務SpringCloud框架在項目中的使用。掌握電商項目用戶、商品、訂單等模塊的實現(xiàn)。掌握項目網(wǎng)關實現(xiàn)接口統(tǒng)一訪問和服務監(jiān)控。掌握項目的部署和運行。從學習SpringBoot快速開發(fā)與使用SpringBoot框架整合常用框架開發(fā),到學習SpringCloud的各個組件進行微服務項目的開發(fā),我們對框架的基本運用已經(jīng)有了一定的了解,但是還沒有在項目中進行綜合的實戰(zhàn)運用,所以本章將通過開發(fā)一個電商項目以及實現(xiàn)其核心功能來使讀者更加熟練、靈活地應用SpringBoot框架和SpringCloud框架。項目分析12項目設計3項目準備4創(chuàng)建Maven項目與common模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關項目分析一個項目在開發(fā)之前必須要先進行需求分析,因此本節(jié)介紹一下項目的背景和功能需求,使讀者對本項目的開發(fā)目標有一定了解。1、項目背景學習過SpringBoot和SpringCloud技術之后我們知道,SpringBoot框架可以讓我們快速開發(fā)一個項目,特別適合小項目或者單一服務的開發(fā),這意味著諸如CRM(CustomerRelationshipManagement,客戶關系管理)、OA(OfficeAutomation,辦公自動化)等管理型系統(tǒng)使用SpringBoot開發(fā)就可以了。但是如果我們想要系統(tǒng)中的模塊耦合性和影響性更小以及靈活性和擴展性更好,就要使用SpringCloud進行微服務開發(fā),而適合這類開發(fā)的項目當屬電商類項目居多,所以我們選擇電商項目進行實戰(zhàn)。2、項目功能介紹通常來說,一個大的電商項目的業(yè)務功能模塊很多,例如,用戶管理、商品、評論、購物車、支付、秒殺、團購、店鋪管理等功能。并且高并發(fā)量引起的并發(fā)性能、流量等問題導致所使用到的技術也非常多,例如,“秒殺”業(yè)務需要更多的技術支持和知識儲備。因為篇幅有限,我們主要對電商項目的基本功能進行實戰(zhàn)開發(fā)。本章開發(fā)的電商網(wǎng)站主要包含用戶注冊、用戶登錄、商品和分類、商品詳情頁購物車及訂單頁面等功能。具體功能介紹以及效果展示如下。項目分析用戶注冊用戶在查看訂單信息等功能的時候需要先登錄,而登錄之前需要用戶先注冊賬號。注冊時需要輸入手機號、短信驗證、用戶名、密碼等信息。②用戶登錄用戶登錄時需要輸入正確的用戶名和密碼。項目分析③商品和分類登陸后通過搜索商品或者通過單擊具體分類項都可以看到商品列表信息項目分析④商品詳情在商品展示頁單擊商品后,可以進入商品詳情頁面,詳情頁中會顯示商品的詳細信息,并且可以設置購買的數(shù)量并添加到購物車或者直接購買。項目分析⑤

購物車購物車頁面顯示了當前用戶的購物車詳情,用戶可以將購物車中的商品結算單,也可以編輯購物車中的商品。項目分析⑥

訂單頁面訂單頁面會顯示當前用戶所有的訂單,訂單狀態(tài)包括待付款、待發(fā)貨、待收貨和已完成四種狀態(tài)項目分析12項目設計3項目準備4創(chuàng)建Maven項目與common模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關項目設計1、系統(tǒng)架構設計了解了我們要做的項目以及具體的業(yè)務功能之后,我們就可以開始設計我們的系統(tǒng)架構和設計數(shù)據(jù)庫了??紤]到到電商類的系統(tǒng)模塊比較多,并且我們也希望整個系統(tǒng)不同模塊之間的耦合性越低越好,各個模塊獨立運行這樣的話模塊間影響也小,整個系統(tǒng)的穩(wěn)定性和靈活性就大大提高,所以我們考慮使用SpringCloud微服務架構開發(fā)。使用微服務架構開發(fā),我們首先要做的就是劃分幾個微服務。根據(jù)業(yè)務功能將系統(tǒng)分為6個服務。他們分別是服務注冊中心EurekaServer、網(wǎng)關和監(jiān)控服務、用戶服務、商品服務、訂單服務、common公共資源服務。項目設計2、數(shù)據(jù)庫設計數(shù)據(jù)庫的設計因為只有基礎的功能所以表的數(shù)量也不多,因此主要一個MySQL數(shù)據(jù)庫mall,核心的表主要是用戶表mall_user、商品表mall_goods和商品參數(shù)表mall_goods_attribute、分類表mall_category、購物車表mall_cart、訂單表mall_order和訂單詳情表mall_order_goods。如圖所示。用戶表mall_user項目設計商品表mall_goods商品參數(shù)表mall_goods_attribute項目設計分類表mall_category購物車表mall_cart項目設計訂單表mall_order項目設計訂單詳情表mall_order_goods項目分析12項目設計3項目準備4創(chuàng)建Maven項目與common模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關項目準備1、開發(fā)工具項目開發(fā)工具如下。(1)項目開發(fā)工具:IntelliJIDEA。(2)項目管理工具:Maven。(3)數(shù)據(jù)庫管理工具:Navicat。(4)前端部署工具:Nginx。2、開發(fā)環(huán)境項目開發(fā)環(huán)境如下。(1)操作系統(tǒng):Windows。(2)Java開發(fā)包:JDK8。(3)SpringCloud版本:Hoxton.SR9。(4)SpringBoot版本:2.2.11。(5)數(shù)據(jù)庫:MySQL。項目準備3、前端環(huán)境準備前端頁面是使用Vue.js框架編寫的。我們將本書附帶的前端代碼文件mall解壓到nginx的html目錄下。啟動Nginx就可以在瀏覽器中訪問前端頁面。項目準備4、微服務的拆分根據(jù)業(yè)務功能將系統(tǒng)分為6個微服務,具體如下。1.服務注冊中心EurekaServer搭建EurekaServer作為服務注冊中心,所有的服務都將注冊到EurekaServer中。2.公共資源服務common項目的公共模塊,主要是為了方便開發(fā)以及簡化代碼。將其他服務需要的資源或者公共的功能放到common服務里,方便調(diào)用以及避免編寫重復代碼。3.用戶服務user項目的用戶模塊,主要包括以用戶為主的服務,例如用戶的登錄、用戶的注冊、用戶的管理以及用戶的相關信息等。4.商品服務goods項目的商品模塊,主要包括以商品為主的服務,例如添加商品、刪除商品、修改商品等。5.訂單服務order項目的訂單模塊,主要包括以訂單為主的服務,記錄了訂單所屬的用戶、訂單中訂購的商品等信息,并對這些訂單進行管理。6.網(wǎng)關與監(jiān)控服務zuul項目的網(wǎng)關與監(jiān)控模塊,主要是為了方便調(diào)用接口以及在接口調(diào)用失敗時快速熔斷,并對服務調(diào)用進行監(jiān)控。項目分析12項目設計3項目準備4創(chuàng)建Maven項目與common模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關創(chuàng)建Maven項目與common模塊1、創(chuàng)建Maven項目下面,我們正式開始開發(fā)項目。首先,創(chuàng)建一個Maven項目作為微服務的父工程,將其命名為“mall”。如圖所示。創(chuàng)建Maven項目與common模塊創(chuàng)建好后,編輯pom.xml文件,如程序清單15-1所示。其中,<properties>標簽里定義了Java和SpringCloud的版本,方便下面的相關依賴引用。首先,因為單個微服務是SpringBoot,所以在<parent>父標簽里寫上SpringBoot依賴。接著,在<modules>標簽里寫上我們將要創(chuàng)建的微服務模塊。然后,在dependencies標簽里寫上所有微服務要繼承的依賴,即spring-boot-starter-web和spring-boot-starter-test依賴。最后,在dependencyManagement標簽里管理子模塊的依賴的版本,注意,這里面的依賴子模塊不會繼承,只用于約束子模塊的依賴版本。build標簽用于編譯和打包配置。SpringBoot項目要用SpringBoot的Maven插件來編譯成jar包。因為打包時默認會先執(zhí)行測試,所以可以在<configuration>標簽中寫<skip>true</skip>,表示跳過此階段,這樣打包就會比較快。創(chuàng)建Maven項目與common模塊創(chuàng)建Maven項目與common模塊創(chuàng)建Maven項目與common模塊2、創(chuàng)建common模塊很多情況下,各個微服務會用到同樣的代碼,如果把這些公用的代碼抽離出來單獨做成一個模塊供其他模塊調(diào)用,就能減少整個工程代碼的冗余性,增強結構層次。經(jīng)過分析可知,工具類和某些自定義注解是公用的,還包括對象存儲,因此我們把這些部分單獨寫在common模塊里。首先,在父工程的名字上右擊,選擇“New”→“Module”,創(chuàng)建模塊common。接著,編輯pom.xml文件,如程序清單15-2所示。值得注意的是,jar包有可執(zhí)行和不可執(zhí)行之分。當一個SpringBoot項目作為其他項目的依賴時,只能是不可執(zhí)行的jar包。因此,common模塊需要配置打包方式,在build標簽中的Maven插件中指明要單獨壓縮可執(zhí)行jar包,這樣當它作為依賴壓縮進其他模塊的jar包時便是不可執(zhí)行的。創(chuàng)建Maven項目與common模塊創(chuàng)建Maven項目與common模塊由于篇幅有限,我們直接展示已經(jīng)配置完成的Common模塊目錄,如圖所示。然后講解一下每個類的作用,如有興趣可以查看提供的項目源碼。LoginUser是自定義的一個注解,用在Controller中的方法參數(shù)上,用于獲取登錄用戶的ID。LoginUserHandlerMethodArgumentResolver是LoginUser注解的解析器,用于實現(xiàn)這個注解的功能。StorageController是本地對象存儲的控制層,用于處理資源的上傳、獲取和下載,本項目中存儲的都是圖片資源。MallStorage是mall_storage表的實體類。MallStorageExample是幫助MallStorage構造SQL語句的工具類。MallStorageMapper是本地對象存儲的數(shù)據(jù)層的接口,供服務層調(diào)用。MallStorageService是本地對象存儲的服務層的接口,供控制層的類調(diào)用。storage包中存放的是用于配置本地對象存儲的類,這里不詳講。util包中存放的是工具類。其中CharUtil用于獲取隨機字符串。JacksonUtil和JsonStringArrayTypeHandler用于JSON解析。JwtHelper和UserTokenManager用于token的創(chuàng)建和驗證,以及通過token獲取用戶ID。ObjectUtil用于同時判斷多個對象是否為null。RegexUtil定義了常用的正則表達式。ResponseCode定義了業(yè)務處理的狀態(tài)碼。ResponseUtil是控制層返回值的數(shù)據(jù)包裝類,十分常用。CommonApplication是啟動類。resources下的mapper中存放的是數(shù)據(jù)層執(zhí)行SQL語句的XML文件。項目分析12項目設計3項目準備4創(chuàng)建Maven項目并提出公共模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關創(chuàng)建注冊中心模塊父工程和common模塊創(chuàng)建好后,創(chuàng)建名為“eureka”的模塊。然后,編輯pom.xml,如程序清單15-4所示。創(chuàng)建注冊中心模塊接著,我們把perties文件的擴展名改為.yml,然后添加程序清單15-5所示的配置。這里不做過多解釋,詳細講解可以參見第9章第2節(jié)。項目分析12項目設計3項目準備4創(chuàng)建Maven項目并提出公共模塊5創(chuàng)建注冊中心模塊6創(chuàng)建各個業(yè)務微服務模塊7創(chuàng)建網(wǎng)關創(chuàng)建各個業(yè)務微服務模塊1.創(chuàng)建用戶模塊eureka模塊創(chuàng)建好后,我們便開始創(chuàng)建3個業(yè)務微服務模塊。首先創(chuàng)建用戶模塊user,創(chuàng)建好后編輯pom.xml,如程序清單15-6所示。創(chuàng)建各個業(yè)務微服務模塊接著,我們把perties文件的擴展名改為.yml,然后添加程序清單15-7所示的配置。這里不贅述,因為和common模塊的配置基本一樣。創(chuàng)建各個業(yè)務微服務模塊同樣地,我們直接展示已經(jīng)配置完成的user模塊目錄,如右圖所示。其中,WebConfig類實現(xiàn)WebMvcConfigurer接口,用于把common模塊中的LoginUserHandlerMethodArgumentResolver配置到HandlerMethodArgumentResolver中,這樣自定義的LoginUser注解才能起作用。AddressController是用戶收貨地址的控制層,用于處理用戶對收貨地址的增刪改查。AuthController是用戶的控制層,用于處理用戶的注冊、登錄,以及用戶信息的查詢和修改。entity包中存放的是用戶相關的實體類,這里不贅述。和common模塊一樣,mapper和service分別存放的是數(shù)據(jù)層和服務層的接口,供控制層的類調(diào)用,這里不贅述了。創(chuàng)建各個業(yè)務微服務模塊下面舉例講解user模塊中登錄、注冊的實現(xiàn)過程。看AuthController中的相應代碼,如程序清單15-8所示。首先在登錄的方法中,通過body參數(shù)接收用戶傳入的用戶名和密碼,先校驗它們是否為空,為空則返回參數(shù)錯誤的提示。接著,調(diào)用userService的queryByUsername方法查詢是否含有此用戶名的賬號,沒有或者有多個則返回錯誤提示。然后,通過BCryptPasswordEncoder編碼密碼后判斷其是否和數(shù)據(jù)庫查詢到的賬號的密碼匹配,不匹配則返回密碼錯誤提示;如果匹配則生成token返回給用戶,下次用戶發(fā)送請求則可以帶上token表明自己已經(jīng)登錄。然后查看注冊的代碼。首先還是通過body參數(shù)統(tǒng)一接收用戶傳入的用戶名、密碼、手機號和短信驗證碼信息。然后判斷它們是否為空,只要有一個為空就返回參數(shù)錯誤的提示。然后同樣調(diào)用userService的queryByUsername方法查詢是否有用戶名相同的賬號,如果有則返回“用戶名已注冊”。接著判斷是否存在相同的手機號,以及校驗手機號的格式。然后判斷短信驗證碼是否正確,這里我們設置固定的,因為短信驗證碼功能真正要實現(xiàn)的話需要租用并調(diào)用云服務商提供的接口,有興趣的讀者可以自行研究。接著,如果前面的校驗都通過了,就可以使用userService的add方法添加此賬號,最后一并返回token信息。創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊2.創(chuàng)建商品模塊用戶模塊創(chuàng)建好后,創(chuàng)建商品模塊goods,然后編輯pom.xml,如程序清單15-9所示。創(chuàng)建各個業(yè)務微服務模塊接著,我們把perties文件的擴展名改為.yml,然后添加程序清單15-10所示的配置。這里不贅述,因為和common模塊的配置基本一樣。創(chuàng)建各個業(yè)務微服務模塊同樣地,我們直接展示已經(jīng)配置完成的goods模塊目錄,如右圖所示。WebConfig類和user模塊中的一樣,這里不再贅述。CartController是商品購物車的控制層,用于處理用戶添加商品至購物車、統(tǒng)計、移除商品等操作。CatalogController是商品分類目錄的控制層,用于處理商品的分類展示。GoodsController是商品的控制層,用于處理用戶查看商品詳情和查詢包含關鍵詞的商品列表等操作。下面的entity、mapper和service包相信讀者都了解它們的作用了,這里不贅述。接下來,查看GoodsController中的方法,如程序清單15-11所示。detail方法用于查詢商品詳情,根據(jù)商品Id依次查詢商品的信息、屬性、規(guī)格以及對應的數(shù)量和價格。FutureTask用于開啟多線程任務,這樣查詢更快。最后把查詢的結果封裝成Map對象返回。category方法用于查詢某一商品分類的父子級。list方法根據(jù)指定條件查詢商品列表,例如根據(jù)分類、品牌、關鍵詞、是否為新品、是否熱賣等,最后查詢出商品所屬類目一起返回給前端。related方法用于查詢相關商品。count方法用于查詢在售商品總數(shù)。創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊然后,查看用于分類的CatalogController中的方法,如程序清單15-12所示。getFirstCategory方法用于獲取所有一級分類目錄。getSecondCategory方法用于獲取所有二級分類目錄。index方法用于獲取所有一級分類目錄以及當前一級分類目錄對應的二級分類目錄。queryALL方法用于獲取所有一級分類目錄以及所有子分類目錄。current方法用于獲取當前分類目錄以及子分類目錄。創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊最后,查看實現(xiàn)購物車的CartController中的方法,如程序清單15-13所示。index方法根據(jù)用戶ID查詢出此用戶的購物車列表,然后循環(huán)遍歷查詢出每個購物車中每個商品的數(shù)量和總價,以及勾選的數(shù)量和總價,最后和總商品數(shù)一起返回給前端。add方法用于把商品添加進購物車。首先判斷用戶ID和購物車參數(shù)是否為空,為空則返回參數(shù)錯誤的提示。然后判斷商品是否為在售商品,不是則返回“商品已下架”。接著判斷購物車中是否有同等規(guī)格的商品,沒有則先判斷是否有庫存,有則創(chuàng)建此商品的購物車對象,將其添加進數(shù)據(jù)庫。如果購物車中已經(jīng)有同等規(guī)格的商品,則先判斷是否有庫存,有則將購物車中同等規(guī)格商品數(shù)量和要添加的數(shù)量相加,最后此用戶的購物車商品總數(shù)也相應增加。update方法用于對購物車中商品規(guī)格或數(shù)量進行修改。首先和上面一樣進行參數(shù)校驗。然后判斷要修改的規(guī)格的商品庫存情況,如果庫存不足則返回提示,庫存充足則進行修改。checked方法用于獲取用戶購物車中已經(jīng)勾選的商品信息,包括數(shù)量、總價等。delete方法用于刪除用戶不想保留的購物車商品。goodscount方法用于查詢用戶購物車中的商品總數(shù)。創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊創(chuàng)建各個業(yè)務微服務模塊3.創(chuàng)建訂單模塊商品模塊創(chuàng)建好后,創(chuàng)建訂單模塊order,創(chuàng)建好后編輯pom.xml,如程序清單15-14所示。創(chuàng)建各個業(yè)務微服務模塊接著,我們把perties文件的擴展名改為.yml,然后添加程序清單15-15所示的配置。這里不贅述,因為和common模塊的配置基本一樣。創(chuàng)建各個業(yè)務微服務模塊同樣地,我們直接展示已經(jīng)配置完成的order模塊目錄,如圖所示。OrderController是訂單的控制層,用于處理用戶提交、查看、取消訂單,以及支付、退款等操作。當然,這里只是模擬支付和退款,真正實現(xiàn)的話

溫馨提示

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

評論

0/150

提交評論