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

前言

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

抽离共用资源成模块

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

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢_第1张图片

业务模块引用

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

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

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

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

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢_第2张图片

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

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


    
        com.xxx
        xxxx-common
        1.0.0-SNAPSHOT
    

注意点

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

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢_第3张图片

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

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

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

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢_第4张图片

总结

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

你可能感兴趣的:(系统业务设计,开发业务技术方案篇,微服务,架构,java)