SpringBoot公共模块配置方式

 更新时间:2024年08月27日 11:13:35   作者:ntyrs  
这篇文章主要介绍了SpringBoot公共模块配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot公共模块配置

开发微服务的项目中,很多时候会将公共的部分抽离出来单独实现,以便于重用、易于维护,为此,我们一般会将公共的配置信息放在公共模块中,这样能尽量减少重复的配置,使得代码结构更简洁清晰,下面是简单的两个模块的配置案例

先看下两个模块的配置结构,common-provider公共模块,包含公共的服务和公共的配置信息,merchant-provider具体业务模块

这是公共模块dev环境配置中的一个参数,后面将读取这个参数来测试

这个是最顶层的父pom,需要在当中配置上面两个模块的profile,其中

<profiles.active>dev</profiles.active>是当前业务模块的profile,

<commonactive>common-dev</commonactive>是公共模块的profile,<commonactive>标签的名称可以根据自己的需要取名称

父pom配置好了后,接下来只需要在merchant-provider模块的bootstrap.yml引入profile就可以了

active的参数值跟父pom中的profile配置的名称需要对应

接着在merchant-provider模块中引入common-provider模块

下面是common-provider模块中的一个文件服务接口,在里面引用了配置文件中的uploadFilePath参数

接下来启动merchant-provider模块

可以看到common-provider模块中uploadFile参数读取到了

Spring Bean和Mybatis接口 扫描路径配置

先看下两个模块的目录结构

common-provide模块

merchant-provider模块

在common-provide模块中,定义了一些公共服务,如FileService文件上传服务,系统配置服务,这些服务在其他的业务模块很多地方会用到,接下来通过配置后,在merchant-provider模块中调用common-provide模块中的FileService服务接口

在common-provide模块定义好了业务Bean以后,接下来就是要配置如何能调用到,也就是要配置扫描Bean的路径,以便Spring扫描到并加载到Spring容器,通常设置Bean的扫描路径无非就是在配置文件中指定路径、在启动类中通过注解@ComponentScan、@MapperScan注解指定,或者通过自定已的配置文件中指定

先看看在启动类中指定

上图中指定了三个扫描路径

@ComponentScan(basePackages ={"com.mall.comservice.service"})

指定common-provider公共模块服务Bean的扫描路径,这里把指定范围限定在最小的service目录,这样可以减少Spring扫描的范围

@MapperScan(basePackages = {"com.mall.merchant.dao,com.mall.comservice.dao"})

这里指定了common-provider公共模的扫描Mapper接口的路径com.mall.comservice.dao

指定了当前模块扫描Mapper接口的路径com.mall.merchant.dao

以上是比较常用的一种做法,但是我们这里是将common-provider公共模抽离出来重用,因此应该尽量减少代码侵入,而上面的这种做法意味着以后其他每个模块要调用common-provider模块时,都需要重复的在每个启动类上配置扫描路径,这种方式不便于维护

因此比较好的做法是,将扫描路径配置到common-provider模块的自定已配置类中,让公共模块自动扫描,而不依赖调用方来指定路径,这样其他业务模块就不用再重复的配置扫描路径了,只需要在pom文件中引入该模块即可

那么接下来我们在common-provider模块中定义一个配置类,并指定服务Bean和Mapper接口的扫描路径

因为需要让公共模块自动扫描,所以还需要针对配置类在建目录resources/META-INF/spring,在该目录下建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,并在该文件中指定配置类的路径,让spring通过该路径扫描到配置类

注:因为本案例采用的是SpringBoot3,SpringBoot3对自动配置类进行了升级,对与SpringBoot2.7版本以下的还是按原来的配置方式,即在resources/META-INF/spring.factories文件中指定配置类的路径,SpringBoot2.7以上版本不在支持这种方式

接下来把merchant-provider模块中起启动类中指定的扫描路径去掉

启动运行看看效果

可以看到日志显示Common-provider模块中的Mapper接口被加载了

然后调用公共模块的FileService接口,接口被@Autowired注入进来了,可以正常的访问

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中的MultipartFile接口和File类解读

    Java中的MultipartFile接口和File类解读

    本文主要介绍了Java中的File类和Spring框架中的MultipartFile接口,File类提供了对文件和目录操作的方法,如创建、删除、重命名、判断文件是否存在等,MultipartFile接口用于处理文件上传,提供了获取上传文件信息和保存上传文件的方法
    2025-02-02
  • Spring Integration概述与怎么使用详解

    Spring Integration概述与怎么使用详解

    公司项目需要用到spring integration,而网上关于spring integration的有价值的参考资料比较少,下面这篇文章主要给大家介绍了关于Spring Integration概述与怎么使用的相关资料,需要的朋友可以参考下
    2023-02-02
  • Java 字符串反转实现代码

    Java 字符串反转实现代码

    这篇文章主要介绍了 Java 字符串反转实现代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • Mybatis环境搭建及文件配置过程解析

    Mybatis环境搭建及文件配置过程解析

    这篇文章主要介绍了Mybatis环境搭建及文件配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Jackson自定义序列化反序列化注解加解密字段详解

    Jackson自定义序列化反序列化注解加解密字段详解

    这篇文章主要介绍了Jackson自定义序列化反序列化注解加解密字段详解,一些场景中,数据库字段用于存储json格式数据,处于安全的考虑,该json数据中,某些敏感信息字段需要做加密存储,例如身份证号、手机号等,需要的朋友可以参考下
    2023-11-11
  • Spring Boot项目集成UidGenerato的方法步骤

    Spring Boot项目集成UidGenerato的方法步骤

    这篇文章主要介绍了Spring Boot项目集成UidGenerato的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MyBatis-Plus数据库配置与数据源整合方案

    MyBatis-Plus数据库配置与数据源整合方案

    本文详细介绍了在MyBatis-Plus中进行数据库配置与数据源整合的常见方法,包括单数据源和多数据源的配置步骤,以及如何使用SpringBoot的自动配置和手动配置来管理数据源,通过合理的配置,开发者可以简化数据库操作,实现高效的数据库管理和复杂的应用架构
    2025-02-02
  • 通过Java实现zip文件与rar文件解压缩的详细步骤

    通过Java实现zip文件与rar文件解压缩的详细步骤

    这篇文章主要给大家介绍了如何通过 Java 来完成 zip 文件与 rar 文件的解压缩,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • java如何获取两个List集合之间的交集、差集、并集

    java如何获取两个List集合之间的交集、差集、并集

    在日常开发中经常会遇到对2个集合的操作,例如2个集合之间取相同的元素(交集),2个集合之间取不相同的元素(差集)等等,这篇文章主要给大家介绍了关于java如何获取两个List集合之间的交集、差集、并集的相关资料,需要的朋友可以参考下
    2024-02-02
  • java图的深度优先遍历实现随机生成迷宫

    java图的深度优先遍历实现随机生成迷宫

    这篇文章主要为大家详细介绍了java图的深度优先遍历实现随机生成迷宫,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论