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

前言

在一个微服务项目中,为了追求低耦合,会根据业务板块对主系统进行切分为一个个子模块,模块间相互隔离,但是这样子就会导致一个问题:对于一些在多个子模块中都适用的配置类、工具类、封装类等都需要拷贝冗余到各个模块中,这样子显然是不太合理的,那么想要鱼和熊掌兼得,我们可以独立创建一个共用子模块,将这一类共用的数据类都给放到这里来,然后将该模块打包为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 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog2 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿3 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河3 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
Jlzn88883 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
香吧香3 小时前
GRPC连接机制---长连接分析
java·网络与传输协议
CCblandy4 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
我是人✓4 小时前
SpringBoot项目的五种创建方式
java·spring boot·后端
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 阿里云 OSS 入门案例:从创建 Bucket 到上传拿到可访问 URL
java·阿里云·交友
裕晟资质规划5 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全