
目錄一、在SpringBoot上建立SpringCloud二、創建父子工程三、每個模塊升級成SpringBootWeb項目四、總結一、在SpringBoot上建立SpringCloud我們前邊創建過SpringBoot項目都會引入一個前綴為springboot-starter-的依賴例如創建一個項目pom文件中就包含parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version4.0.2/version relativePath/ !-- lookup parent from repository -- /parent我這里的springBoot版本號是4.0.2,我們ctrl點擊artifactId后逐層進入父pom會看到一個巨大的“版本仲裁中心”這里存放了很多依賴的版本號這也讓我們先前在引入依賴時沒有去指定版本號因為這里面存放的就是推薦版本。比如我們熟知的mysql依賴但是沒有springcloud依賴的版本但是springcloud又是在springBoot之上建立的。所以在springboot項目上創建springcloud項目需要引入springcloud依賴。這個時候我們有多種選擇可以選擇引入官方SpringCloud、SpringCloud Alibaba、等其他微服務生態。他們都集成了所必須的組件例如服務注冊和發現等。阿里巴巴生態是國內的主流選擇集成Nacos、Sentinel等阿里開源組件。如果你想要使用netflix OSS組件那么你也可以引入官方Spring Cloud.更多時候我們都是結合著用的。值得注意的是我們此時導入的是一個SpringCloud生態是一個BOM物料清單而非jar包。需要將其放到dependencyManagement節點下這里面并不含有任何業務代碼只是一份依賴清單。所以導入時要指定類型為pom明確這是個“元數據”不是代碼。其次就是作用域為import,這樣只要子項目引入后就能把倉庫里面所有的版本聲明全部復制到當前項目的dependencyManagement中了。不同的作用域有不同作用作用域編譯測試運行compile(默認)生效生效生效test生效provided生效生效runtime生效生效import(只能給BOM用)---SpringBoot版本不同需要引入的cloud依賴版本也不同。針對這個問題可以查看官方手冊。官方SpringCloud版本SpringCloud官方阿里巴巴SpringCloud版本SpringCloud阿里巴巴dependencyManagement dependencies !--官方SpringCloud-- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version2025.1.0/version typepom/type scopeimport/scope /dependency !--阿里巴巴SpringCloud-- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version2025.1.0.0/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement當你引入了任何一個他們包含的jar包時才可以使用同樣的方式ctrl點擊artifactId看到一些版本配置信息這些都是推薦的版本。里面有我們經常使用的Openfeign和Gateway,阿里巴巴BOM中還有我們會使用的nacos等組件。二、創建父子工程之前我們的應用程序是單體架構現在我們需要把它拆分成分布式微服務架構。這樣做的好處是將服務進行拆分分別部署到不同服務器上減輕單個服務器的壓力單個服務發生宕機不會導致整體服務不可用提高了穩定性按照業務拆分進行解耦降低業務耦合在多人開發中有利于分工合作。例如博客服務可以簡單分為這么三類用戶服務博客服務和網關服務。用父子工程的方式將其管理起來就構成了分布式架構。這三個服務可以分別部署在不同的機器上和不同的端口上。Common作為公共組件為其他服務提供工具。本身不是服務不含啟動類。到時候每個服務的jar包打完都會含有一個common jar包用來為自己的程序服務。我們先創建父工程創建一個Maven空項目刪除掉src目錄因為我們并不需要在父工程下寫任何業務代碼,所以父工程必須打包成pom。在pom文件中添加如下配置這樣方便我們管理依賴不會發生版本沖突。?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.miao/groupId artifactIdspring-cloud-blog/artifactId version1.0-SNAPSHOT/version !-- 聲明父工程的打包方式為pom -- packagingpom/packaging modules moduleblog-info/module moduleuser-info/module modulegateway-service/module moduleblog-common/module /modules !-- 完善依賴 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.1.6/version relativePath/ !-- lookup parent from repository -- /parent properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target java.version17/java.version mybatis.version3.0.3/mybatis.version mysql.version8.0.33/mysql.version mysql.plus.version3.5.5/mysql.plus.version spring-cloud.version2022.0.3/spring-cloud.version spring-cloud-alibaba.version2022.0.0.0-RC2/spring-cloud-alibaba.version /properties !--所有子項目都會繼承的依賴-- dependencies dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies !-- 依賴管理 不會給父工程、子模塊引入任何 jar 包 只定義好「依賴坐標 固定版本」 子模塊需要用到某個依賴時只需要寫 groupId、artifactId省略 version自動繼承父工程這里約定好的版本 -- dependencyManagement dependencies dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring-cloud-alibaba.version}/version typepom/type scopeimport/scope /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version${mybatis.version}/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-spring-boot3-starter/artifactId version${mysql.plus.version}/version /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version${mysql.version}/version /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter-test/artifactId version${mybatis.version}/version scopetest/scope /dependency /dependencies /dependencyManagement /project父工程打包成pom后這樣指定的modules才會被識別到注意先創建模塊才會出現modules這樣整個組織結構才得以建立。我們還在pom文件中提前約定了版本號這是一組非常穩定的組合后續依賴均使用這組版本號不會導致混亂。需要注意父工程里的dependencies會被子項目所繼承例如Lombok而dependencyManagement則不會被繼承例如mybatis它只是聲明了依賴信息包括版本號作用域等。后續子項目需要引入依賴時才會被引入這個時候就會按照我們約定好的配置去引入依賴。接下來只要按照我們上面的模塊名創建子工程即可。可以發現子模塊的Lombok依賴被隱式繼承了自身pom文件中無但是依賴庫里能看到。如此反復創建得到如下的目錄配置文件也會顯示父子關系三、每個模塊升級成SpringBootWeb項目此時我們需要對網關服務、用戶服務和博客服務添加SpringWeb依賴并且添加配置信息和啟動類。dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId /dependencyweb來自springboot父工程的起步依賴我們的springboot版本是3.1.6所以用的是web,如果是4.0.x則要改成mvc.隨后創建配置文件指定端口號那需不需要指定IP地址呢每個服務確實由IP地址端口號確定的。但是我們完全沒必要去指定我們會把服務注冊到nacos當我們程序跑起來時會自動向nacos上報IP地址和端口號所以不用擔心別的服務找不到我們。例如先做這樣的配置后續的話需要配置很多東西目前配置先這樣寫。接著添加啟動類。然后測試是否可以成功運行控制臺顯示成功運行。這樣我們所有的工作就做完了。后續的博客業務就在這個子目錄下完成。四、總結到目前為止我們學習了分布式微服務的創建流程重要的是父項目如何管理依賴后續不會發生依賴沖突。BOM需要在dependenceManagement中聲明類型為pom文件作用域為import,主要注意這些就能規避大部分錯誤。