Spring Bootのmainファイルは適切な位置に配置しよう

こんにちは。 エキサイト株式会社の三浦です。

Spring Bootで起動に必須となるmainファイルですが、適切な配置にしないと気づきにくい問題が起きる場合があります。

今回は、実際に起きてしまった問題をもとに説明していきます。

問題の構成

早速ですが、以下のパッケージ構造には問題があります。

src/
└── main
    └── java
        └── com
            └── example
                └── sample
                    ├── config
                    │   └── SampleConfig.java // @Configurationや@Bean等を用いた設定ファイル
                    └── controller
                        ├── SampleApplication.java // mainファイル
                        └── SampleController.java // Web用Controllerファイル

このままでも、mainファイルである SampleApplication.java からビルド・実行自体は可能なのですが、実はこれだと SampleConfig.java による設定が読み込まれません。

パッケージの階層的に、mainファイルが設定ファイルを読みに行ってくれないものと思われます。

解決方法

解決するためには、以下のように変更します。

src/
└── main
    └── java
        └── com
            └── example
                └── sample
                    ├── SampleApplication.java // mainファイル
                    ├── config
                    │   └── SampleConfig.java // @Configurationや@Bean等を用いた設定ファイル
                    └── controller
                        └── SampleController.java // Web用Controllerファイル

設定ファイルがmainファイルより下の階層のパッケージになるよう、mainファイルのパッケージ階層を1つ上げました。

これにより、設定ファイルも問題なく読み込まれるようになります。

最後に

この問題は、実行自体は問題なくできてしまうために、気づきにくいものとなっています。

特にプロジェクトの立ち上げ直後などは起きやすい問題だと思いますので、パッケージ構造には注意しておきましょう。