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.