207

現在のさまざまな環境プロファイルに基づいて、さまざまなロジックをコーディングする必要があります。

Spring から現在アクティブなデフォルトのプロファイルを取得するにはどうすればよいですか?

4

8 に答える 8

288

あなたは自動配線することができますEnvironment

@Autowired
Environment env;

Environmentオファー:

于 2012-02-13T21:08:19.820 に答える
68

より完全な例を次に示します。

オートワイヤー環境

まず、環境 Bean をオートワイヤーします。

@Autowired
private Environment environment;

アクティブなプロファイルにプロファイルが存在するかどうかを確認します

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

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

于 2017-01-09T17:40:57.973 に答える
14

自動配線を使用していない場合は、単に実装してくださいEnvironmentAware

于 2012-11-13T13:43:18.877 に答える
6

これに静的にアクセスできるようにする必要があるようです。

非Spring管理クラスの静的メソッドでそのようなことを取得するにはどうすればよいですか? – エーテロス

これはハックですが、独自のクラスを作成して公開できます。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;
    }
}
于 2020-04-17T13:53:37.433 に答える