天天看點

Mybatis報錯ConflictingBeanDefinitionException

1.結果

    修改@MapperScan的掃描位置,直接定位到Mapper目錄

2.情況說明

  負責的spring cloud項目增加了一個業務子產品,為了防止以後需要進行拆分就在對應的一級目錄下建立一個子目錄,由于之前的隻有一個業務子產品,是以之前隻掃描了對應目錄,此次新增的子產品暫時是掃描不到mapper的.為了能夠掃描到是以的mapper目錄,在啟動類上修改了掃描的路徑,直接掃描一級目錄,使得新舊的二級目錄均可以被掃描到,結果啟動報錯,org.springframework.context.annotation.ConflictingBeanDefinitionException.結果排查,确認确實有倆個依賴的服務的API名字一樣,這個确實有問題,但是依賴早就有了不是此次增加的.經過debug發現 @MapperScan注解會進行初始化Bean操作,排查代碼之後也同時發現重名的api名稱,業務并沒有使用,是以不應該被初始化才對.此次版本修改之前服務都能正常啟動,并沒有增加其他相關的配置,确認@MapperScan掃描的位置有問題,修改@MapperScan的掃描位置,直接定位到Mapper目錄.

3.備注

  (1).名稱重複的問題也暴露出來了,百度一番發現可以進行修改相關Bean初始化的解析器

  (2)Mapper掃描的位置問題,也是值得自己反思,居然直接加到一級目錄,多初始化了很多東西

  (3)檢視代碼變更情況,分析代碼修改影響範圍的能力很重要

繼續閱讀