#概要
Spring Bootを使ってWebアプリケーションを作ろうとした際に、以下のようなエラーが出ました。
Paramete 0 of constructor in hogeDao required a bean of type 'HogeConfigurationProPertiers' that could not befound.
このエラーの時に考えられる原因をQiitaやらで調べると、 必要な アノテーションが書かれていないことや、パッケージ構成がおかしいなどの記事を多く見つけれたのですが、自分の場合は解決しませんでした(実際にはアノテーションが関係していましたがorz)。設定周りのDIで調べると今回の解決策が出てきたので、エラー文とともに解決策を載せておきます。
原因
自分の場合、設定された値をアプリケーションで使うために、HogeConfigurationPropertiesで ConfigurationProperties アノテーションを付与して使っていました。
ConfigurationPropertiesアノテーションは設定ファイルと変数名をバインディングするために使われるものです。
ConfigurationPropertiesアノテーションをつけることでComponentスキャンされてBeanに登録しているのだろうと勝手に解釈していたのですが、それはSpringBoot2.2.1以前までの仕様で、v2.2.1からはこのConfigurationPropertiesアノテーションではスキャンをしてくれなくなったのが原因のようです。
解決策
ConfigurationPropertiesアノテーションをつけた設定クラスとは別に、以下のようなHugaConfigurationクラスを作成して、EnableConfigurationPropertiesアノテーションをつけます。
そうすることでBeanを登録することができ、解決できました。
@EnableConfigurationProperties({HogeConfigurationProperties.class})
public class HugaConfiguration {
// ...
}
まとめ
バージョンに依る違いを当たり前のように考えられるようにすると、強く誓いました。