springboot模块分化,实体模块分离出来之后报错

用于搜索引擎抓取

2021-04-12 10:53:30.965 ERROR 25268 — [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Description:
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class

问题背景

今天在做springcloud的demo时,想着将实体单独分离出来成一个模块,因为可能很多其它的模块都要使用实体,到时候只要依赖这个实体模块就好了。
分离是分离出来了,在生产者一起正常。但是在消费者模块,出现了问题,消费者项目启动的时候就报错,错误信息就是文章开头的那些信息。

着手分析

错误信息大概意思就是:没有数据源。我的消费者项目,只需要用http去调用生产者提供的接口就行了,本身不会去连数据库,所以不用配置数据源按道理也是可以的(经过我测试,如果真按照错误提示去修改,给消费者模块配置数据源,是可以完成功能的,但是需要在消费者模块中多引入依赖,连接池和驱动),但其实消费者根本就没有和数据库打交道,凭什么要我配置数据源?究竟是什么因素,需要在配置数据源呢?

经过我细致的分析排查(哈哈,其实项目本身就没多少东西),是因为我的实体模块中,引入的mybatis-plus的starter,
实体模块中的依赖实体模块中为啥要引入这个依赖呢?因为我实体中需要用mybatis中的一些注解。
实体类注解用来映射表名和字段名等等,当初引依赖的时候,没多想,照着上个项目就复制过来了。其实问题就在这里,这个mybatis-plus的starter里面,存在一种机制,启动就去找数据源(具体是什么逻辑,目前太菜还不知道),所以就会报错。

解决方案

定位到问题了,那就好解决了,从根本上解决的办法就是:在实体模块中引入依赖时,只引入注解包,不引入其他的东西。

只引入注解

在看博客的时候,我还找到了另外一种解决办法,为啥引入mybatis-plus的starter就需要配置数据源呢?是因为这个类
原因类所以只需要在依赖中将这个类排除,但是在用maven引入依赖的时候,排除也只能排除某个jar包这种很大颗粒的排除,不能做到排除某个类那么细粒度的排除。但是有些大佬有妙计,具体我就细解释了,可以看这篇博客,https://blog.csdn.net/w8y56f/article/details/108185786。如果是springboot项目,还有一种更简单的排除方式:spring启动类上的注解SpringBootApplication有一个属性exclude,可以排除具体类。
在这里插入图片描述
上面总共说了两种办法,更细的可以分为三种,不过我个人比较推荐第一种,从根本上解决问题。
为啥有DataSourceAutoConfiguration这个类,就必须配置数据源这个问题,还有待深究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值