您好,登錄后才能下訂單哦!
這篇文章給大家介紹@MapperScan和@ComponentScan一塊使用導致沖突的解決方法,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
項目集成了knief4j
報錯:
NoSuchBeanDefinitionException: No qualifying bean of type 'springfox.documentation.schema.TypeNameExtractor'
很明顯是容器缺少必須的bean,啟動不成功
@MapperScan和@ComponentScan一起使用
1.建一個配置類
啟動類不做改變
package com.test.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.test.bean") public class FileNameUtilsConfig { }
啟動類做改變,使用@MapperScan一塊掃描
@MapperScan(basePackages = {"com.test.mapper","com.test.bean"})
公司項目有個小伙子將項目的日志功能做了優化。今天在pom添加依賴,在啟動類上加個注解,然后啟動項目突然報了ModuleMapper 找不到。
項目一直是好的,又沒有對這個mapper修改。進入ModuleMapper 中發現上面也是有@Mapper注解的
可是為什么容器找不到呢,分析一下剛剛修改的才做,引入依賴加注解,問題可能是注解上的問題,注釋掉添加的注解,啟動服務正常運行。罪魁禍首就是這個注解。
點解注解發現配置類上有個@MapperScan掃描注入。發現這伙計需要操作數據庫。而我接收負責的項目用的是傳統的@Mapper注入。
思考:難道在一個項目中@MapperScan和@Mapper不能共存嗎?
自己創建一個springboot 項目,開始用@Mapper 注入容器 啟動程序。程序正常啟動。
停掉服務,將mapp文件上的@Mapper刪除 ,將文件移動到mapper文件中,在啟動類上添加@MapperScan 掃包注入。正常啟動。
現在測試@MapperScan 和@Mapper 分別在不包中測試一下。現在將UserMapper 放在mapper包中, 將UserTokenMapper 放在mapper2包中并添加@Mapper 啟動測試。
啟動類:
UserMapper :
UserTokenMapper :
啟動項目報錯:
Description:
Field userTokenMapper in com.wyz.yangyang.member.service.impl.MemberServiceImpl required a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' that could not be found.
Action:
Consider defining a bean of type ‘com.wyz.yangyang.member.mapper2.UserTokenMapper' in your configuration.
Disconnected from the target VM, address: ‘127.0.0.1:56527', transport: ‘socket'
Process finished with exit code 1
然后我有測試可@MapperScan 掃描的包中不放mapper 文件,mapper2 中mapper文件都添加@Mapper,發現啟動正常。
又測試了@MapperScan 和@Mapper 同在一個包中,啟動正常。
在此可以看出 @MapperScan 和@Mapper在不同包中,@Mapper注解失效。
為了項目快速開發,為了以后更好的兼容,我將項目改為@MapperScan 模式,因為一個注解可以配置多個包路徑。
關于@MapperScan和@ComponentScan一塊使用導致沖突的解決方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。