Spring Boot 定義ファイル読込

定義ファイルの設定値により実行する処理を振り分けてみた

Spring Bootの設定値は、定義ファイルである「application.yml」や「application.properties」で定義するが、その設定値による処理の振り分けは@ConditionalOnPropertyアノテーションで定義できる。

今回は、@ConditionalOnPropertyアノテーションを利用したサンプルプログラムを作成してみたので、共有する。

前提条件

下記記事の「IntelliJ IDEA上でSpring Bootプロジェクトの読み込み」まで完了していること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

サンプルプログラムの内容

まず最初に、定義ファイルに「application.yml」を利用して作成した、サンプルプログラムの構成は以下の通り。
サンプルプログラムの構成_yml
なお、上記の赤枠が、今回新規で作成したプログラムとなる。

まず、application.ymlの内容は以下の通り。今回は、「demo.test」の設定値により処理の振り分けを行う。

次に、テスト値を取得するインタフェースとその実装クラスの内容は以下の通り。

「DemoTestFalse.java」「DemoTestTrue.java」が、インタフェース「DemoTest,java」の実装クラスになる。「demo.test」の設定値がtrueの場合は「DemoTestTrue.java」の実装クラスが、falseの場合は「DemoTestFalse.java」の実装クラスが、それぞれ呼ばれるようになっている。

コントローラクラスのプログラムは以下の通り。この中で「DemoTest,java」の実装クラスを呼び出している。

さらに、HTMLファイルの内容は以下の通り。取得したテスト値を表示している。

application.ymlで「demo.test=true」の場合に、Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスした場合の実行結果は以下の通りで、「DemoTestTrue.java」の実装クラスの呼び出し結果が設定されていることが確認できる。
サンプルプログラムの実行結果true

また、application.ymlで「demo.test=false」とした場合の、Spring Bootアプリケーションを起動し、「http:// (ホスト名):(ポート番号)」とアクセスした場合の実行結果は以下の通りで、「DemoTestFalse.java」の実装クラスの呼び出し結果が設定されていることが確認できる。
サンプルプログラムの実行結果false

なお、「application.yml」を「application.properties」に変更した場合も同様の結果となる。この場合のサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成_properties

また、application.propertiesの内容は以下の通り。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-divide-by-prop/demo

要点まとめ

  • 定義ファイルである「application.yml」や「application.properties」の設定値による処理の振り分けには、@ConditionalOnPropertyアノテーションを利用すればよい。