接下来的一段时间,我们将要来学习微服务,本着重实战的原则,你不需要去深究一些相关的原理,只要能跟着教程一步一步做下来,就可以快速地掌握Java微服务开发技巧。
我们学习微服务的第一步,就是要知道怎么创建聚合工程,虽然说微服务和聚合工程没有直接和必然的联系,但是现在工作中只要用到微服务,就一定是聚合工程。既然绕不开,我们就从聚合工程开始吧。
聚合的意义
对于一个大型的项目,如果我们直接作为一个工程开发,由于相互之间的依赖我们只能从头到尾由一组人开发,否则就会出现一个类好多人开发,相互更改的混乱局面,这个时候我们就将项目进行了横向和纵向的拆分。
横向拆分
所谓的横向的拆分就是我们平常说的三层架构,将每个功能模块分成三层去开发 即web层(表现层),service层(业务逻辑层)、dao层(数据访问层、持久层), 可以理解为将一个功能模块的不同调用过程(三层的调用)进行了水平方向的拆分。
纵向拆分
所谓的纵向拆分就是将一个项目根据多个功能模块进行拆分,可以理解为,为了完成一个系统,深度(纵向)分析需要有哪些功能,然后将这些功能独立出来(独立为模块),进行了(纵向)拆分。
横向和纵向拆分后,对每层架构和功能模块进行单独的开发,项目整合的时候就需要有一个能够整合这些架构或者模块的工程,这就是所谓聚合工程的意义。
创建聚合工程的要点(重点理解):
该聚合项目(父级项目、顶级项目)本身也是一个maven项目,它必须有自己的pom
它的打包方式必须是:pom
引入新的元素:modules—module(模块:每个模块其实也是一个项目)
版本:聚合模块的版本要和被聚合模块的版本一致
relative path:每个module名称都是一个当前pom的相对目录
目录名称:为了方便快速定位,模块所处的目录应当与其artifactId一致(maven约定而不是硬性要求),总之,模块所处的目录必须要和聚合模块中的模块目录保持一致。
聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java和src/test/java等目录,因为他只是用来将其他模块整合构建成一个整体的工具,本身并没有实质的内容。
聚合模块和子模块的目录:它们可以是父子级,也可以是平行结构(推荐)。
默认是父子级结构,但是不建议使用,因为父子级是一种嵌套关系,子模块要建在父模块里面,维护起来很容易紊乱;推荐使用平行结构,是因为维护起来一目了然,条理比较清晰,当然同时要在pom文件的中修改相应的目录路径配置。
如果聚合模块对某一个子模块进行了删除操作,那么一定要在聚合模块的pom.xml文件中的modules选项中将对应的子模块删除掉。
快速入门
首先,我们创建一个父项目:
选择简单项目
打包方式是pom,不要选错了
pom.xml增加hutool的依赖,后面有用。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javaxbfs</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>父项目</name> <description>父项目</description> <dependencies> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.3.1</version> </dependency> </dependencies> </project>
最后再更新一下maven一下依赖
接下来是重头戏,我们要创建子项目
,也叫做模块
。
首先右键点击 父项目, 然后点击 New -> Other -> Maven -Maven Module -> Next
和父项目一样,这里也勾选 Craete a simple project,然后点 Next
点Finish
目录结构变成了这样
在子项目里面创建一个测试类
测试代码
package com.child.test; import cn.hutool.core.date.DateUtil; public class TestChild { public static void main(String[] args) { System.out.println(DateUtil.now()); } }
效果:
可以看到,子项目虽然没有引入Hutool却可以继承父项目的Hutool,说明父子工程创建成功了!
子项目的pom.xml多了一个父项目依赖
<parent> <groupId>com.javaxbfs</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
父项目的pom.xml多了一个module
<modules> <module>child-one</module> </modules>