2012-02-13 6 views
80

異なる現在の環境プロファイルに基づいて異なるロジックをコーディングする必要があります。現在のアクティブなプロファイルとデフォルトのプロファイルをSpringからどのように取得できますか?Springで現在のアクティブ/デフォルト環境プロファイルをプログラムで取得するにはどうすればよいですか?

+0

を解決できなかった場合は... activeProfileは今、「不明」が含まれています。 – aweigold

+3

@aweigold:Spring 3.1で現在のアクティブ/デフォルトの環境プロファイルをプログラムで取得する3.1。どのような詳細が必要ですか? – Bobo

+0

私は編集を申し出ました。私は完全な編集権を持っていません。できれば私の投票を元に戻します。 – aweigold

答えて

123

あなたは単にここEnvironmentAware

+2

'@ Resource'(Spring 4.2)でも動作します –

10

を提供しています

@Autowired 
Environment env; 

環境をautowireすることができますが、より完全な例です。

Autowire環境

まず、環境Beanをautowireすることになるでしょう。

@Autowired 
private Environment environment; 

チェックプロファイルがアクティブプロファイル

に存在するならば、あなたは、プロファイルがアクティブなプロファイルのリストに存在するかどうかを調べるためにgetActiveProfiles()を使用することができます。ここではString[]getActiveProfiles()から取得し、その配列からストリームを取得し、マッチャを使用して複数のプロファイルをチェックする(大文字と小文字を区別しない)ブール値を返す例を示します。

//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

14

を実装し、あなたはオートワイヤリングを使用していない場合は環境がString[] getActiveProfiles()String[] getDefaultProfiles()、およびboolean acceptsProfiles(String... profiles)

+1

@Profileは最適なソリューションのようです。 –

11
@Value("${spring.profiles.active}") 
private String activeProfile; 

は、それが動作し、あなたがEnvironmentAwareを実装する必要はありません。しかし、私はこのアプローチの欠点を知らない。

+1

この行には次のエラーがあります: '原因:java.lang.IllegalArgumentException:" $ {spring.profiles.active} "のプレースホルダ 'spring.profiles.active'を解決できませんでした。 – zygimantus

3

User1648825の素敵な単純な答え(私はコメントすることはできませんし、私の編集が拒否された)の拡張:何のプロファイルが設定されていない場合、これは(私がnull値を取得)はIllegalArgumentExceptionをスローすることが

@Value("${spring.profiles.active}") 
private String activeProfile; 

を。あなたが設定する必要がある場合、これは良いことかもしれません。 @value、すなわちのために「デフォルト」構文を使用しない場合:

@Value("${spring.profiles.active:Unknown}") 
private String activeProfile; 

spring.profiles.activeは、あなたがより多くの細部を必要

関連する問題