springboot 啟動之后報錯:UnsatisfiedDepencyException:Error creating bean with name ‘aaaServiceImpl’: Unsatisfied dependency through field ‘bbbClient’。
這兩天一直在進行著日常 debugger 查看代碼。可是發生了一個挺“靈異”的事件。那就是我看的項目某些模塊突然間啟動不了了!!!著實震驚,因為在上午前半段我還啟動了代碼,啟動了服務。具體的原因,我說一下。
因為客戶需求,所以我又在原來的項目上面添加功能,然后中間需要用到其他服務的 service 層。所以,秉著能抄就抄、能模仿就模仿的原則,我查看其他的(也就是原來他人所寫)代碼,我發現可以用到 feign 。所以,也就照著“模仿”了。然后下面就是,我在啟動的時候,出現了下面的錯誤:
org.springframework.beans.factory.UnsatisfiedDepencyException: Error creating bean with name 'aaaController' defined in file [E:\項目名字的物理路徑\controller\AaaController.class]: Unsatisfied dependency expressed through constructor parameter 0: nested exception is org.springframework.beans.factory.UnsatisfiedDepencyException:Error creating bean with name 'aaaServiceImpl': Unsatisfied dependency through field 'bbbClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.項目名.b服務.feign.bbbClient': Unexpected exception during bean creation; nested exception is java.lang.IllegalstateException: No fallback instance of type class org.項目名.b服務.feign.bbbClientFallback found for feign client 項目名-b服務at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstrucorResolver.java:779)......
解釋一下啊,因為保密協議,我不確定什么可以放出,什么不可以放出,所以只要上面有涉及到的,我都用了其他來代替。
- aaaController:是我需要在這個 controller 來像前端返回一些請求。
- aaaServiceImpl:controller 到 service 的實現類。
- bbbClient:這就是我在 aaaController 里面需要用到 b 服務的 service 而所寫
也就是,我在 a 服務里面調用 b 服務里面的某一個 service,我使用了 feign。
然后,就是這些我寫完了之后,再進行 debugger 啟動時,出現了上面的錯誤信息。
最開始,我覺得是沒有啟動好,或者 idea 日常的幺蛾子。所以,我就重新啟動了一下。經過了一會兒,再次出現了,我想這會不會是這個項目有問題?然后我就把所有的模塊都重啟了一次。
又是一段漫長的等待,還是如此,然后還多了兩個模塊,報的也是上面同樣的錯誤。我開始了懷疑人生。怎么又多了倆?這兩個模塊我也沒有動代碼啊?咋回事?然后我開始了網絡查詢。看了眾多之后,看到了一篇和我一樣的。他的解決方法是:在啟動類上面添加了一個注釋:@MapperScan(basePackages = “org.項目名.b服務.feign.bbbClient”)。然后我再次重新啟動,然后可以啟動了。可是這已經是中午了。對,整個上午沒有干什么事情,就是一直在啟動,啟動…
在吃飯的時候,我問了一下帶我的前輩,他說:既然之前能夠啟動,證明別人所寫是沒有問題的。你不能夠私自在啟動類上面添加一些注釋。因為架子別人已經搭好了,你寫需求還是沒問題的,但是啟動類,還是要小心一些。你也要想想是不是你自己寫的代碼有問題。
…
吃完午飯,我打開了電腦,神奇的一幕,我的 a 服務報錯了。就是再 idea 上面有一片紅色的波浪線。(此時是已經把啟動類上面自己所加的注釋給去了的)。然后開始找錯的地方,用 idea 給的提示,發現再 pom.xml 文件里面添加了一個 b 服務的依賴。此時我不能理解。但是重啟了一下,好了。至此,暫告一段。
接著,我開始照著抄了一下自己寫的代碼:因為這個需求邏輯相同,但是是不同的地方,不同的類(主要是 bbbClient 里面添加了新方法)。在再次啟動的時候,對,我又懷疑了人生。我這次也添加了依賴啊?為什么還會出現這個問題呢?不理解,極致不理解。我自己查的也不是一個好的解決方法,我開始向我加的群里面的大佬們請教。很快,有位群友說:可以嘗試一下 clean 編譯一下試試。我重新試了試,至此完美解決。
造成一切的原因是:
- 自己 a 服務里面用了 b 服務的 service ,自己沒有添加依賴。這個誰都不愿,只能怨自己代碼熟悉得不夠多,不夠熟練。
- 嗯,只能說 idea 這幺蛾子有點多。之前是只要自己語法錯誤,它會給我們報出錯誤。但是這次沒有。
- 最后,還是只能怨自己。畢竟,要是熟悉了使用 feign 的步驟,哪會有這些問題?
以上,只算是自己的一些見解。謝謝!!!