微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢

前言

在一个微服务项目中,为了追求低耦合,会根据业务板块对主系统进行切分为一个个子模块,模块间相互隔离,但是这样子就会导致一个问题:对于一些在多个子模块中都适用的配置类、工具类、封装类等都需要拷贝冗余到各个模块中,这样子显然是不太合理的,那么想要鱼和熊掌兼得,我们可以独立创建一个共用子模块,将这一类共用的数据类都给放到这里来,然后将该模块打包为jar包在各个子模块pom文件中引入,这样子就可以实现一份共用配置在多个子模块中使用,并保证了子模块间的隔离性。下面让我们来看一下相关的具体配置操作。

抽离共用资源成模块

我们在这一块可以将一些那些在多个子模块都需要的资源(eg:响应实体、常用工具类、常量类、全局异常处理等)抽离出来写到一个专门的公共资源模块中

业务模块引用

然后我们就可以将这个共用子模块进行打包为Jar给其他业务模块引用,这里科普一下 Maven 命令知识点,一般我们打包使用比较多的命令就是 package、install、deploy。

声明一点就是这三个命令都能打包,有什么区别呢?

  • package: 该命令完成了项目编译、单元测试、打包功能三个过程。
  • install: 在 package 命令的前提下新增一个步骤,将新打好的包部署到本地 Maven 仓库。
  • deploy: 在 install 命令的前提下新增一个步骤,将新打的包部署到远端仓库(相当于本地和远端仓库同时部署一份)。

而我们只是本地仓库引用,只需要 install 命令执行即可,两种方式分别是 Maven 插件或者终端执行命令 mvn clean install。

可以去对应的仓库坐标下查看 Jar 是否部署成功。如果不知道怎么操作可以参考我的另一篇文章【依赖dependency / 插件Plugin】 not found?可以看看这思路-CSDN博客

然后再其他业务模块的pom文件中就能直接进行引用啦

xml 复制代码
<dependencies>
    <dependency>
        <groupId>com.xxx</groupId>
        <artifactId>xxxx-common</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </dependency>
</dependencies>

注意点

这里要注意一下就是说,如果你公共模块中定义了SpringBean的话,想要进行自动装配就必须在公共模块的项目 Resources 目录下新建 META-INF 文件夹,然后创建 spring.factories 文件。在文件中填写好自动装配类的全限定类名

为什么要指定 resources/META-INF 下写 spring.factories?不这么写不行啊。

SpringFactoriesLoader#loadFactories 负责完成自动装配类的加载,扫描的就是这个变量文件。

你不按照规定写可以,扫不到你的自动配置类可咋整,消停的吧。

总结

总结起来,需要按照一定的规范将共用的配置类、工具类、封装类等放在共用子模块中,并将该子模块打包为jar包引入到各个子模块中。如果希望在共用子模块中的代码能够进行自动装配,需要在公共模块的 Resources 目录下创建 META-INF/spring.factories 文件,并在其中填写自动装配类的全限定类名。遵循这些配置操作可以实现共享配置并保持子模块间的隔离性。

相关推荐
你的人类朋友2 分钟前
🫏光速入门cURL
前端·后端·程序员
01传说25 分钟前
vue3 配置安装 pnpm 报错 已解决
java·前端·vue.js·前端框架·npm·node.js
hunzi_11 小时前
搭建商城系统
java·uni-app·php
Boilermaker19922 小时前
【Java EE】Mybatis-Plus
java·开发语言·java-ee
aramae2 小时前
C++ -- STL -- vector
开发语言·c++·笔记·后端·visual studio
xdscode2 小时前
SpringBoot ThreadLocal 全局动态变量设置
java·spring boot·threadlocal
lifallen2 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
丶小鱼丶2 小时前
链表算法之【合并两个有序链表】
java·算法·链表
张先shen3 小时前
Elasticsearch RESTful API入门:全文搜索实战(Java版)
java·大数据·elasticsearch·搜索引擎·全文检索·restful
舒一笑3 小时前
PandaCoder重大产品更新-引入Jenkinsfile文件支持
后端·程序员·intellij idea