微服务架构设计
模块划分
在微服务架构下,我们需要大致调整一下模块的划分。首先我们创建一个Spring Boot项目,将里面的src等无用文件删除,只留pom.xml文件这种,然后再创建几个模块(Module),如果你还需要创建子模块,那么递归地执行上述步骤即可。
一般的模块划分如下:
- common:公共模块,比如配置类、实体类、工具类、常量等。
- gateway:网关模块,负责请求的转发、权限控制、负载均衡等。
- api:接口模块,负责暴露接口,供其他模块调用。
- service:业务模块,负责具体的业务逻辑。
pom文件
父pom文件
-
最开始,我们需要先声明自己parent的身份。
-
为了版本管理的便捷性和一致性,我们需要声明依赖管理。
-
我们还需要指定自己子模块的名称。
-
接着就是dependencyManagement,声明依赖的版本,这些依赖会被继承到子模块中。
- 这里的scope被设置为
import
,代表父模块和子模块都依赖这个依赖。当子模块需要这些依赖时,仍然需要显式声明,但是不需要版本号。
- scope为
compiled
(默认):这个项目在编译、测试、运行阶段都需要这个JAR包在classpath中。
- scope为
provided
:可以认为要运行的目标容器已经provide这个依赖,无需我们再打包进去,也就是说,它仅仅影响到编译和测试,而不会影响到运行。
- scope为
runtime
:这个依赖仅仅在运行时需要,编译时不需要。
- scope为
test
:这个依赖仅仅在测试时需要,编译和运行时不需要。
-
对于非公共依赖,仅仅只在父模块用到的,我们还需要独立声明。
-
定义项目的构建过程。
<resources>
: 用于配置项目资源文件的处理。src/main/resources 目录下的所有文件会被打包到最终的 JAR 包中。src/main/java 目录下的所有 .xml 文件也被打包到 JAR 包中。
- pluginManagement: 用于配置插件的管理。
子模块pom文件
-
声明父pom文件。
什么时候需要声明relativePath?当子模块和父模块在同一个项目中时,relativePath可以省略。
-
声明自己。
-
声明依赖。
虽然子模块仍需显式声明父模块已经在 dependencyManagement 中声明的依赖,但是由于父模块起到的版本集中管理的职能,所声明的依赖不需要带上版本号。