先說背景,是這樣的。我們用的springcloud,做了微服務。
我的啓動類,所在的目錄如下:
大部分都是直接在com.lenovoedu目錄下,而有的是在com.lenovoedu的子目錄下。比如com.lenovoedu.newexam等。
我啓動類的配置如下,所有的微服務都一樣:
問題就出在這裏,只要啓動類是直接在com.lenovoedu下面的,就能正常跟其他子服務進行通信。只要是在com.lenovoedu的子目錄下的,就會直接被熔斷,然後直接fullback.我的fullback如下,是自己定義的異常,直接拋出。
但是這樣是看不到具體的異常信息的。再次,教大家一招,在fullback裏直接拋出RunTimeException。你就能看到具體的異常信息了。如下:
然後我的異常信息如下:
猛一看,空指針。我去這不是客戶端沒有被注入嗎。然後,肯定是沒有掃描到啊。
但是我@ComponentScan(basePackages = {"com.lenovoedu"})配置了呀。
於是開始研究@ComponentScan和@EnableFeignClients的掃描。
@ComponentScan:此註解是用來管理容器中的bean,即是管理項目中類的依賴關係, 注意此註解並不創建類的實例; 默認情況下此註解掃描本工程下的所有包
@EnableFeignClients: 此註解的作用是掃描標記了@FeignClient的接口並創建實例bean,默認掃描並創建所在工程下的包。如果在springBoot的分佈式中需要用到別的微服務的工程的接口實例,就需要單獨配置。如果我的類都是在com.lenovoedu下,那麼不單獨配置也是可以的。所以纔會出現文中剛開始說的問題,只要是在啓動類直接在com.lenovoedu下的微服務間都能正常通信。
修改啓動類配置如下後,通信正常:
推薦這篇博客看一下: