org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hoge':
というエラーに物凄く苦しめられて、物凄く時間を奪われました。
二度と悪夢を見たくないので備忘録として書いておきます。
【気をつけたいこと】
➡︎このエラーが出てきたとき、
これはbean記述ファイルに問題がある場合もあるが、
それよりも、
build.gradleや、Amazon S3にアクセスできていないこと等が原因であることがある。
Error creating bean with name 'hoge'が大量発生したとしても、build.gradleの特定の一行だけを消したり、
S3コンソールから設定をするだけで一瞬で解決してしまうことがあり得る。
エラーメッセージを間に受け、山崎屋の技術メモなどを参考にして、beanのところを生真面目に血眼になって見ていて数日無駄にしてしまいました。。。
(参考:山崎屋の技術メモ)
https://www.shookuro.com/entry/2016/08/10/092234
数年後に追記
(当時はSpring BootのDI(依存性の注入)についてまるで理解していなかったため、わけもわからずこの様な投稿をしていたのですが、)
要は、Spring Bootの起動時に、DIコンテナ(アプリケーションコンテキストとも呼ばれることがある)にインスタンスを登録する処理がフレームワークの仕組みとして走るわけですが、この時に「Error creating bean with name 'hoge'」の'hoge'が取得できなかった、という意味のエラーです。
なぜ'hoge'を取得できなかったのか?を辿る必要があります。
UnsatisfiedDependencyExceptionの原因は非常に広く、実装不備である場合もありますが、環境不備であることも多々あります。すぐ特定できる場合もあれば、そうでない場合もあります。
原因さえわかれば解消には時間がかからない場合が多いです。
【考えられる(ありがちな)原因例】
・pom.xml,build.gradleのdependencyの記述漏れ(必要なモジュールがない)
・pom.xml,build.gradleのモジュール(dependency)間のバージョンの不整合
(一例としては、springのバージョンとmybatisのバージョンが噛み合わずにエラーになる、という場合があったりします)
・必要なアノテーションをつけていない
(@Autowiredをつけているが、対応する@Component、@Service等が存在しない場合など)
・application.propertiesの記述誤り、記述漏れ
・データベースのレコードが取得できない
(@ConfugurationでDBから取得する処理があるが、取得結果が0件だった場合など)
・Amazon S3にアクセスするシステムだが、接続できない
一般的には、開発初期段階では実装不備のことが多いでしょうし、開発後半では環境不備の方が多いでしょう。