maven多模块实现以及循环依赖解决

本文深入解析微服务架构下订单服务的拆分与Maven多模块项目结构,探讨模块间的依赖关系、循环依赖及重复依赖的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.项目拆分为微服务 订单服务被单独拆出 负责订单的下单取消退款等等

订单服务 provider

商品服务 是订单服务的comsumer

 

2.项目是maven多模块形式结构 以订单的provider举例

最外层pom.xml中 配置公共的基础依赖jar包,其他子模块会相应引入相同的jar

order-api为暴露给comsumer调用的接口,service-order为api的实现,provider为main函数的入口,项目的启动类

 

同时需要在最外层的pom.xml中定义子模块的module

 

module的名字跟子模块中的artifactId相同

 

以下为子模块的artifactId的例子

子模块需要声明parent才能继承父pom.xml的依赖 同样需要填写父parent的artifactId

 

模块之间的依赖关系 api模块只依赖最基础的三方模块,不能依赖其所在项目的模块,防止出现循环依赖

service模块需要依赖api模块 以及相应的common模块(基础的常用工具类或者result封装对象可以写在这里)和mapper模块(数据库的操作模块,也可以叫manager模块) 以及pojo模块(最基础的实体模块,其不应该再依赖任何模块),

common模块和mapper模块以及pojo模块, 在comsumer项目中有,通过install命令推到maven的本地仓库中

provider项目可以通过引入maven依赖的形式 去使用这些jar

启动类模块中需要依赖service模块,因为需要在启动的时候加载这些模块

一定要加上包扫描,因为默认的扫描只会扫描该启动类所在的目录以及其子目录,而多模块并不满足这个条件

所以需要特别定义

 

扫描的路径 就是每个子模块下的java目录下的第一个包路径 比如 com.nchu.order

并不需要考虑子模块名称

 

需要注意的点。

第一,循环依赖,这个出现频率最高! 举个例子, 如果common模块依赖了pojo模块,mapper模块依赖common模块,而pojo模块居然去依赖mapper模块,此时就出现了循环依赖,因为此时 common模块里面有pojo模块,mapper模块里里面有commom模块,而pojo里面有mapper模块。 分析如下 commom->pojo->mapper->comom ,死循环

 

循环依赖报错如下

 

解决方式

Analyze->Analyze Module Dependencies.

 

即可看到标红

 

通过这种方式可以知道具体是哪些模块出现了循环依赖,去对应的pom文件中去删掉即可

 

千万注意模块之间的依赖关系。

 

 

还有一种情况,就是循环依赖出现在误操作的时候引入,则可以继续用下面这种方式去解决

选中pojo 然右键

 

最后选择modules 找到要解决冲突的子模块名称 选择dependencies 选择刚刚冲突的mapper 右键remove 即可

 

第二 重复依赖 即对同一个接口 引入多个实现类,常见于日志框架,因为日志slf4j就是一个接口,它的实现有很多,比如logback log4j等

这里报错就是 slf4j有多个实现类 冲突了 。原因是,在maven项目里引入多了多个jar,比如说引入了zookeeper和dubbo, 而dubbo和zookeeper分别对是slf4j采用了不同的实现类,一个使用的是log4j,一个是logback ,这样在spring在注入的时候,就不会不知道该注入哪个bean

解决方法一,直接找到这个jar所在的目录,直接删掉, 这个方法简单粗暴,但是只能用一时,下次编译的时候,又会从maven仓库里引入进来

解决方法二,利用idea提供的maven依赖管理工具去从pom.xml里把冲突的jar移除

 

 

方法二的解决方式 在pom.xml中,右键maven ->show dependencies

 

可以很明显的找到冲突的jar 但有时候也需要根据经验去判断

选中之后 右键 exclude 即可将多余的jar从依赖中排除

### 数据库集合不存在的错误解决方案 当遇到 ErrorCode -502005 表示数据库集合不存在(ResourceNotFound Db or Table),通常意味着尝试访问的表或集合尚未创建或者已被删除。以下是可能的原因分析以及对应的解决方法。 #### 可能原因及解决办法 1. **未创建目标集合** 如果程序试图查询或操作一个尚不存在的集合,则会触发此错误。可以通过显式创建所需的集合来解决问题[^1]。 ```sql CREATE TABLE IF NOT EXISTS my_table ( id INT PRIMARY KEY, name VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 2. **拼写错误** 集合名称可能存在大小写敏感性或其他拼写问题,尤其是在区分大小写的数据库环境中。确认所使用的集合名称与实际存在的完全一致。 3. **权限不足** 用户账户可能缺乏足够的权限去查看特定的数据库资源。可以检查并授予必要的权限给当前用户角色[^2]。 4. **逻辑错误** 应用程序中的业务逻辑可能导致它尝试访问还未初始化的数据结构。审查应用代码路径以确保只有在适当条件下才执行这些操作。 5. **数据迁移遗漏** 在某些情况下, 特定环境下的数据迁移脚本未能成功运行也可能造成该现象。重新评估部署流程中涉及的所有变更脚本是否被执行完毕。 通过上述措施应该能够有效处理 `ErrorCode -502005` 的情况。如果问题依旧存在,建议查阅更详细的 Database Debug Logs (即信息日志) 来获取进一步线索。 ```bash tail -f /path/to/database/logs/debug.log ``` 这可以帮助定位具体哪个部分出了差错,并提供额外上下文用于诊断复杂场景下发生的异常行为。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值