ngbatis icon indicating copy to clipboard operation
ngbatis copied to clipboard

failed to start: `'cup.biz.kg.dao.TagBasicMapper' that could not be found.`

Open zhangxk-ocean opened this issue 2 years ago • 34 comments

  1. 报错信息: Description: Parameter 0 of constructor in cup.biz.kg.service.impl.TestServiceImpl required a bean of type 'cup.biz.kg.dao.TagBasicMapper' that could not be found. Action: Consider defining a bean of type 'cup.biz.kg.dao.TagBasicMapper' in your configuration.

2.配置信息 image image image image

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

ServiceImpl类: image

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

导致这个问题的可能有两个原因 1 xml需要放在resources下 2 springboot启动位置没有加包扫描

CorvusYe avatar May 23 '23 06:05 CorvusYe

我实在application配置中将xml文件位置换了,然后启动位置也加包扫描了呀,在另一个项目中这么做的,启动正常

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

刚刚没注意看图了,不好意思哈 看下 xml 里面的 namesapce 是不是指向了对应的mapper.java

CorvusYe avatar May 23 '23 06:05 CorvusYe

image xml文件里面是写了一个createTag语句,指向了mapper.java

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

项目根目录有 asm-debug 的目录生成吗

CorvusYe avatar May 23 '23 06:05 CorvusYe

没有

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

在这个地方断点看下这个报错的 mapper 的信息, loadClassCode(classModelEntry);

CorvusYe avatar May 23 '23 06:05 CorvusYe

image 应该是没走到这

zhangxk-ocean avatar May 23 '23 06:05 zhangxk-ocean

那往上一行断点,按理开始读取 bean 了,这步已经走完了,那最大的可能是 这个 map 是空的,还是扫描的位置出了问题

CorvusYe avatar May 23 '23 06:05 CorvusYe

或者在这个位置端点,直接看扫描得到了哪些内容:https://github.com/nebula-contrib/ngbatis/blob/8b6b9d5d3d52a3ce5359a8165d947f2610185f10/src/main/java/org/nebula/contrib/ngbatis/io/MapperResourceLoader.java#L78

CorvusYe avatar May 23 '23 06:05 CorvusYe

有点奇怪,直接就结束了

zhangxk-ocean avatar May 23 '23 07:05 zhangxk-ocean

啊啊啊... 那只能直接断点在入口了https://github.com/nebula-contrib/ngbatis/blob/8b6b9d5d3d52a3ce5359a8165d947f2610185f10/src/main/java/org/nebula/contrib/ngbatis/NgbatisContextInitializer.java#L28

springboot是什么版本

CorvusYe avatar May 23 '23 07:05 CorvusYe

没看版本 断点在入口就行了,要看什么呢 image

zhangxk-ocean avatar May 23 '23 07:05 zhangxk-ocean

类没有被加载,这就是类没被扫描到吧,Application里的问题

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

会不会跟这个问题是一样的 https://github.com/nebula-contrib/ngbatis/issues/111 只是猜测哈

CorvusYe avatar May 23 '23 08:05 CorvusYe

不是,我用的hosts

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

感觉这个是扫描包出的问题 image zhelia这俩注解一起用也没问题吧,我试了试其他的项目,也没事

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

我也没这么写过诶,回头验证下,配置中心用的是啥,nacos 吗,把配置放到配置中心看看?

CorvusYe avatar May 23 '23 08:05 CorvusYe

配置中心用的nacos,配置就放在了nacos里

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

我试了下,把Mapper和mapper.xml删掉,就能正常启动了,因为mapper报的错

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

nebula.pool-config.min-conns-size = 0 ? 这个值改成正的试试,让一启动就连接数据库,排除一下配置没读到的问题 之后再来排查是不是 bean 没扫描到的问题

CorvusYe avatar May 23 '23 08:05 CorvusYe

这个值设置的是2

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

报错的原因应该是是mapper调用不到mapper.xml里面的方法

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

或者是service层调用mapper.java里的方法时报的错

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

是动态代理的过程没执行。代理类没生成,asm-debug 这个文件夹没生成的话,也说明 jvm 中没有接口对应的实现类

CorvusYe avatar May 23 '23 08:05 CorvusYe

没看版本 断点在入口就行了,要看什么呢 image

你在这里往下执行,到 if nebula.hosts 的判断。 使用了 nacos 的话,这个方法会进两次,一次是空的直接跳过 if,第二次才会真正读到值

CorvusYe avatar May 23 '23 08:05 CorvusYe

看到了,里面的nebulaPool的值是原始值,然后我就把nacos配置放到了bootstrap配置文件中,启动成功了,问题就是没有加载nacos里的配置,这是什么原因呢

zhangxk-ocean avatar May 23 '23 08:05 zhangxk-ocean

两次 if 前读取的配置都是原始值吗?这个我还得再跟下

CorvusYe avatar May 23 '23 08:05 CorvusYe

这是因为没有加载到nacos的配置

zhangxk-ocean avatar May 23 '23 09:05 zhangxk-ocean