問題
在SpringBoot項目開發時,使用單元測試來運行一個Service,發現調用的一個Bean就是找不到,報錯為:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.gaosiedu.gsl.mq.base.MqSendService' available: expected at least 1 bean which qualifies as autowire candidate.
這個意思大概翻譯是:找不到符合條件的bean。
但是我明確的定義了這個bean,只是用的不是注解的方式,而是用的xml 的方式。
在springboot項目的main類里,添加了注解 @ImportResource,在對應的配置文件里添加了這個bean的定義,如下:
@ImportResource({
"classpath:*dubbo-*-spring.xml",
"classpath:*mq-*-spring.xml"
})
解決
最終發現,原因是@ImportResource注解中指定的classpath,在服務器中正式運行的時候,和單元測試的時候,指的不是同一個地方
在服務器正式運行時,需要在文件夾類型為【Sources Root】的文件夾下
在單元測試時,需要在文件夾類型為【Test Sources Root】的文件夾下
如何設置文件夾類型呢?只需要在文件夾上右鍵,選擇【Mark Directory as】,如圖:
正常情況下,main/resources 是【Sources Root】類型,test/resources是【Test Sources Root】test類型
我之前只是在main/resources 下新建了配置文件,所以才會報錯。當把對應的兩個配置文件拷貝到test/resources 目錄下就沒問題了
PS:只有明確寫明了classpath: 的配置文件才需要在test 目錄下也新建一份,一般的配置文件,比如配置數據庫連接的文件,是不需要這么搞的。
原創文章,歡迎轉載,轉載請注明出處!