【SpringBoot】読み込むプロパティファイルごとに処理を変える

はじめに

お世話になります、hosochinです
今回はJavaのSpringBootで環境ごとに処理を変えたい場合の方法についてです
ConditionalOnPropertyというアノテーションを使うことで、プロパティファイルの設定値ごとに処理を変更することができます
こいつを使って生成するbeanを出し分けることも可能です

実装例

本番用の設定ファイル(application-prod.yml)と開発環境用の設定ファイル(application-dev.yml)を用意してあげて、設定ファイルの値を読み取って生成するbeanを変更します

  • 本番用の設定ファイル(application-prod.yml)
env: prod
  • 開発環境用の設定ファイル(application-dev.yml)
env: dev
  • サービスクラスのConfiguration
  • 今回のキモであるConditionalOnPropertyに注目
@Configuration
public class SampleServiceConfig {

    @Bean
    @ConditionalOnProperty(value = "env", havingValue = "dev", matchIfMissing = true)
    public SampleService devService() {
        return new DevSampleService();
    }

    @Bean
    @ConditionalOnProperty(value = "env", havingValue = "prod")
    public SampleService prodService() {
        return new ProdSampleService();
    }

}
  • サービスクラス
public interface SampleService {
    String getToken();
}

public class DevSampleService implements SampleService {
    @Override
    public String getToken() {
        return "dev token";
    }
}

public class ProdSampleService implements SampleService {
    @Override
    public String getToken() {
        return "prod token";
    }
}

解説

SampleServiceConfigでプロパティファイルの「env」という値を読み取ってbeanを出し分けています
「value」でプロパティファイルで定義したプロパティ名を指定します
「havingValue」で期待値を設定し、一致した場合にその処理が読まれます
「matchIfMissing」でデフォルトの処理を設定しています
各オプションについての詳細はこちらを参照

IntelliJで環境変数を設定してアプリケーションを起動する方法


技術spring,SpringBoot

Posted by hosochin