DubboxDemo之環境搭建(Maven多模塊項目)git
在以前的 Dubbox入門配置 中咱們已經瞭解了怎麼配置和部署Dubbox,那麼做爲一個分佈式框架,其核心就是將項目部署到不一樣的服務器上,而後經過註冊中心進行調用。github
因此,咱們必須瞭解一下怎麼在本地部署一個分佈式項目,即利用maven實現的多模塊項目,這樣多個模塊間是相互獨立的(屬於不一樣的項目),可是又能夠相互依賴(經過pom配置模塊間的相互依賴)web
下面咱們將利用IDEA構建一個maven分佈式項目。數據庫
<!--more-->服務器
源碼,點擊進入個人 GitHub架構
parent
項目parent
項目就是一個父類項目,他存在的意義就是管理其全部子項目的pom
依賴。app
1.新建框架
這裏須要注意:上面咱們已經提到了parent
項目存在的意義就是管理子項目的pom
依賴,因此這裏不須要勾選Create from archetype
,即咱們不須要在parent
父類項目中寫代碼。 而後咱們繼續next
。eclipse
咱們將父類項目名設置爲dubbboxdemo-parent
webapp
2.修改 咱們將建立好的父類項目的src
包刪除,由於這個父類項目只須要管理pom
依賴便可,不須要寫代碼。 那麼咱們的parent
父類項目就完成了建立。 最終項目結構
pojo
模塊pojo
項目顧名思義就是存放Java實體類的項目,對於分佈式項目而言,不少模塊均可能須要調用同一個pojo
類,因此咱們將pojo類單獨提取出來供其餘模塊項目調用訪問。
1.新建
右鍵點擊咱們的父類項目dubboxdemo-parent
選擇new Module
新建一個模塊。這裏咱們須要使用模板,選擇maven-archetype-webapp
新的項目名稱咱們設置爲dubboxdemo-pojo
,而且IDEA幫咱們自動關聯了父類項目dubboxdemo-parent
如上圖所示爲咱們建立第一個子項目debboxdemo-pojo
後的完整項目結構。
觀察二者pom文件的變化
debboxdemo-pojo
子項目的pom文件中能夠發現存在一個<parent>
節點,就是代表此子項目依賴於父項目dubboxdemo-parent
。並注意:此處的debboxdemo-pojo
的打包方式是jar
dubboxdemo-parent
父項目中咱們發現多了一個<modules><modele>
節點,其就標明瞭這個dubboxdemo-pojo
模塊是本身的子項目。並注意:此處的dubboxdemo-parent
的打包方式爲pom
maven常見的打包方式是:pom、jar、war。對於IDEA而言,新建的項目默認的打包方式是war
。可是若是不寫<packaging>
節點,maven默認將項目打包成jar
包。
咱們須要的就是告訴maven,我這個項目是什麼類型的。若是你設置爲jar
或者不添加<packaging>
節點,maven就會幫你把項目打包爲一個jar文件;若是你設置爲war
,maven就會將你的項目打包成一個war
文件;若是你設置爲pom
,maven不會生成任何東西。
注意如下規則:
jar
: 是maven的默認打包類型,通常此模塊中的代碼是須要被其餘各個模塊共用的,並也不是父類模塊,就用這中打包方式,可添加可不添加。war
: 若是你的這個項目模塊是web項目,便是須要用來運行在Tomcat服務器上的,就將此項目打包成這種類型。pom
: 若是這個項目是父類項目,即如咱們的案例中全部的子項目的最上層都是一個parent
項目,這個項目不用來寫程序,僅僅用來管理jar包,因此須要打包成pom
類型。interface
模塊仍和上面建立pojo
項目的步驟相似,咱們建立的dubboxdemo-interface
接口模塊須要使用maven的模板,選擇maven-archetype-webapp
選項。
dubboxdemo-interface
接口模塊,顧名思義就是用來定義接口的,在之前已經提到了,模塊化的項目中,各個部分都應該定義在不一樣的模塊中,目的就是提升重用率。
如上所示,新建立的dubboxdemo-interface
接口模塊打包類型應該設爲jar
。
service
模塊上面咱們已經建立了dubboxdemo-interface
接口模塊,下面咱們固然要建立對應的實現類模塊dubboxdemo-service
。
和建立interface
模塊步驟是相同的,咱們在項目中建立dubboxdemo-service
模塊。這裏須要注意的是service
實現類模塊打包類型是war
類型。
dao
模塊建立了service
層模塊了,下面就須要建立dao
層模塊了,即dao
層模塊是用來和數據庫打交道的,用來持久化數據等。
咱們建立dubboxdemo-dao
模塊,並注意這裏的打包方式應該設置爲jar
類型。
web
模塊建立了service
層模塊、建立了dao
層模塊。下面固然是建立web
層模塊了。
咱們建立dubboxdemo-web
模塊。並注意這裏的打包方式是war
類型。
到如今爲止,咱們已經建立了常見的分佈式模塊了,固然實際項目中,你還可能建立其餘模塊項目,好比common
模塊等,能夠將通用的程序抽取出來,提升重用率。
如上是總體項目結構。其中dao
interface
pojo
三個模塊都是打包成jar
類型、service
web
兩層是須要打包成war
類型。
上面咱們已經完成了基本的項目建立,回過頭來想一想:咱們本次建立的是一個基於dubbox的分佈式項目,項目首先須要啓動Service
模塊,向zookeeper
註冊遠程服務地址;而後啓動Web
模塊,並中服務地址列表中隨機選取一個分配給Web端
調用。
那麼咱們須要配置各個模塊之間的關係,否則就沒法實現各個模塊之間的關聯,也就沒法實現調用。
如上,其實就是咱們常見的三層架構,而在這裏的區別之處就是各層都使用模塊隔離出來了。咱們須要知道的就是怎樣在IDEA上創建這些模塊之間的聯繫關係。
注意 各個模塊都是打開這個Open Module settings
,下面我不在截圖。
以後創建模塊間的依賴。
如上,點擊+
,選擇Module Dependency
添加模塊依賴。可是這裏呢,由於咱們尚未寫代碼,可能不知道應該怎樣創建依賴,注意,這裏的依賴設置和前面說的三層架構之間的調用有區別,這裏創建的依賴至關於Jar的依賴關係,即咱們須要使用另外一個模塊之間的接口、方法對象…的時候就添加對應的模塊的依賴。好比,一般而言,咱們會在web層調用service層,而須要這時須要依賴interface
模塊,而咱們還須要調用pojo
進行裝配Bean
,那麼還須要依賴pojo
模塊。
除了上面的依賴配置還不行的,咱們還須要手動在pom
中創建依賴關係,注意,這裏就是傳說的三層架構設計了。
groupId
以及artifactId
使咱們以前創建父模塊parent
已經設置好的。如上,咱們只須要配置一個依賴關係便可,也就是web-service-dao
的設計。這個配置與上面的模塊配置是不一樣的,並且若是你重複配置了pom
中的依賴關係,運行項目的時候是確定會報錯的,這個與eclipse
是不一樣的。
在interface
中,這裏咱們可能會用到pojo
對象,因此創建與pojo
的依賴關係。
service
模塊便是interface
模塊的實現類,他既須要繼承interface
,又須要調用dao
,因此咱們給service
配置與這二者之間的關係。
pojo模塊不須要和依賴其餘模塊,因此無需配置。
dao
模塊,在這裏可能須要pojo
模塊,因此創建與pojo
模塊間的依賴關係,這裏我不在貼圖。
到此爲止咱們基本算是配置好了各個模塊間的依賴關係,須要注意的就是,在Module setting
中,咱們須要使用哪一個模塊中的方法,咱們就配置依賴哪一個模塊,而在pom
文件中咱們須要遵循三層架構的調用關係便可。
固然,若是咱們沒有配置對應的模塊依賴,咱們也能夠根據idea報錯自動添加對應的依賴,可是注意盲目的根據idea的報錯任其生成自動生成配置,可能會產生依賴重複注入的問題,總之,配置依賴前先考慮各個模塊間的關係。
<br/>
若是你們有興趣,歡迎你們加入個人Java交流羣:671017003 ,一塊兒交流學習Java技術。博主目前一直在自學JAVA中,技術有限,若是能夠,會盡力給你們提供一些幫助,或是一些學習方法,固然羣裏的大佬都會積極給新手答疑的。因此,別猶豫,快來加入咱們吧!
<br/>
If you have some questions after you see this article, you can contact me or you can find some info by clicking these links.