天天看點

記一個springboot多子產品包掃描問題

記一個springboot多子產品包掃描問題

問題描述:

springboot建立多個子產品,當一個子產品需要使用另一個子產品的服務時,需要注入另一個子產品的元件,如下面圖中例子:

記一個springboot多子產品包掃描問題
記一個springboot多子產品包掃描問題

memberservice子產品中的MemberServiceApiImpl類需要注入common子產品中的RedisService元件,該怎麼注入呢?

解決:

在memberservice子產品的啟動類上加上RedisService類所在包的全路徑的元件掃描,就像這樣:

記一個springboot多子產品包掃描問題

注意啟動類上方的注解@ComponentScan(basePackages={“com.whu.commom.redis”}),這一句實際上就已經加上了RedisService的元件掃描,但是這樣做是有問題的,我發現啟動後服務不能正常通路。查找資料後發現是因為@ComponentScan 和@SpringBootApplication注解的包掃描有沖突,@ComponentScan注解包掃描會覆寫掉@SpringBootApplication的包掃描。解決辦法就是在@ComponentScan(basePackages={“com.whu.commom.redis”})的基礎上加上@SpringBootApplication掃描的包,那麼@SpringBootApplication掃描了哪些包呢?實際上,它預設掃描的是啟動類所在的包及其子包,是以我的例子上需要改成@ComponentScan(basePackages={“com.whu.commom.redis”,“com.whu.memberservice”}). OK ,結束!!