回答:
User1648825の素敵な簡単な答えを拡張します(コメントできず、編集が拒否されました):
@Value("${spring.profiles.active}")
private String activeProfile;
プロファイルが設定されていない場合、IllegalArgumentExceptionがスローされる可能性があります(私はnull値を取得します)。これを設定する必要がある場合、これは良いことかもしれません。そうでない場合は、@ Valueに「デフォルト」構文を使用します。つまり、
@Value("${spring.profiles.active:Unknown}")
private String activeProfile;
... spring.profiles.activeを解決できなかった場合、activeProfileに「不明」が含まれるようになりました
これは、より完全な例です。
Autowire環境
最初に、環境Beanを自動ワイヤリングする必要があります。
@Autowired
private Environment environment;
プロファイルがアクティブプロファイルに存在するかどうかを確認する
次に、を使用getActiveProfiles()
して、アクティブなプロファイルのリストにプロファイルが存在するかどうかを確認できます。以下は、String[]
from getActiveProfiles()
を受け取り、その配列からストリームを取得し、マッチャーを使用して複数のプロファイル(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")
プロファイルを使用して同様の機能を実現することもできます。プロファイルを使用すると、渡されたパラメーターまたは環境パラメーターに基づいて選択的に構成できます。このテクニックの詳細は次のとおりです。スプリングプロファイル
@Value("${spring.profiles.active}")
private String activeProfile;
それは機能し、EnvironmentAwareを実装する必要はありません。しかし、私はこのアプローチの欠点を知りません。
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
@Profile
です。アプリはこのspring.profiles.include
プロパティも使用でき、初期化中にを使用してプログラムでプロファイルを設定できますConfigurableEnvironment
。Environment.getActiveProfiles()
これらのメカニズムのいずれかを使用して設定されたプロファイルの完全なリストを取得します。
これに静的にアクセスできるようにする必要があるようです。
スプリング管理されていないクラスの静的メソッドでそのようなことをするにはどうすればよいですか?–エーテル
これはハックですが、独自のクラスを作成して公開することができます。SpringContext.getEnvironment()
このコンポーネントがいつインスタンス化されるかは保証されていないため、すべてのBeanが作成される前に何も呼び出されないように注意する必要があります。
@Component
public class SpringContext
{
private static Environment environment;
public SpringContext(Environment environment) {
SpringContext.environment = environment;
}
public static Environment getEnvironment() {
if (environment == null) {
throw new RuntimeException("Environment has not been set yet");
}
return environment;
}
}