現在のさまざまな環境プロファイルに基づいて、さまざまなロジックをコーディングする必要があります。 Springから現在のアクティブおよびデフォルトのプロファイルを取得するにはどうすればよいですか?
User1648825のニースの簡単な答えを拡張します(コメントできず、編集が拒否されました):
@Value("${spring.profiles.active}")
private String activeProfile;
これは、プロファイルが設定されていない場合にIllegalArgumentExceptionをスローする場合があります(null値を取得します)。設定する必要がある場合、これは良いことかもしれません。 @Valueに「デフォルト」構文を使用しない場合、つまり:
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
... spring.profiles.activeを解決できなかった場合、activeProfileに「不明」が含まれるようになりました
以下に、より完全な例を示します。
Autowire Environment
まず、環境Beanを自動配線します。
@Autowired
private Environment environment;
アクティブなプロファイルにプロファイルが存在するかどうかを確認します
次に、getActiveProfiles()
を使用して、アクティブなプロファイルのリストにプロファイルが存在するかどうかを確認できます。 getActiveProfiles()
からString[]
を取得し、その配列からストリームを取得し、マッチャーを使用して、存在する場合にブール値を返す複数のプロファイル(Case-Insensitive)をチェックする例を次に示します。
//Check if Active profiles contains "local" or "test"
if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
env -> (env.equalsIgnoreCase("test")
|| env.equalsIgnoreCase("local")) ))
{
doSomethingForLocalOrTest();
}
//Check if Active profiles contains "prod"
else if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
env -> (env.equalsIgnoreCase("prod")) ))
{
doSomethingForProd();
}
アノテーション@Profile("local")
を使用して同様の機能を実現することもできます。この手法の詳細は次のとおりです。 Spring Profiles
@Value("${spring.profiles.active}")
private String activeProfile;
これは機能し、EnvironmentAwareを実装する必要はありません。しかし、私はこのアプローチの欠点を知りません。
自動配線を使用していない場合は、EnvironmentAware
を実装するだけです