web-dev-qa-db-ja.com

環境変数からアクティブなスプリングプロファイルを追加するにはどうすればよいですか?

これまで、~/.bash_profileで次の環境変数を設定しています。

export SPRING_PROFILES_ACTIVE=local

これは私のアクティブな春のプロファイルを設定しました。しかし今、私はローカルプロファイルをapplication.propertiesで定義された他のプロファイルに追加し、置換しないようにしたい。

Spring Bootのドキュメント には、アクティブプロファイルの追加に関するセクションがありますが、環境変数からアクティブプロファイルを追加することについては何もわかりません。

SPRING_PROFILES_INCLUDE環境変数を設定しようとしましたが、効果がありません。

これを行う方法?

追伸:Spring Boot1.4.2を使用しています。

6
Ortomala Lokni

デフォルトの追加プロファイルあり

式を使用して、定義されたプロファイルの横にあるapplication.propertiesファイルに独自の環境変数を導入できます。たとえば、現在のファイルが次のようになっている場合:

spring.profiles.active=profile1,profile2

カスタム環境変数を使用すると、次のように変更されます。

spring.profiles.active=profile1,profile2,${ADDITIONAL_APP_PROFILES:local}

ここで、ADDITIONAL_APP_PROFILESは、SPRING_PROFILES_ACTIVEの代わりに設定した環境変数の名前です。

localは、変数が現在の環境に設定されていない場合に使用されます。その場合、localというプロファイルがアクティブになります。デフォルト値を設定せず、環境変数が存在しない場合、式全体がアクティブなプロファイルの名前として使用されます。

デフォルトの追加プロファイルなし

デフォルトプロファイルのアクティブ化を回避したい場合は、変数式の前のプレースホルダー値とコンマを削除できます。

spring.profiles.active=profile1,profile2${ADDITIONAL_APP_PROFILES}

ただし、その場合、現在の環境で設定されている変数はコンマで始まる必要があります。

export ADDITIONAL_APP_PROFILES=,local
9

リンクしたドキュメントの次の文:

アクティブなプロファイルを置き換えるのではなく、追加するプロファイル固有のプロパティがあると便利な場合があります。 spring.profiles.includeプロパティを使用して、アクティブなプロファイルを無条件に追加できます。

したがって、コマンドラインパラメータを使用してアプリケーションを起動できます。

-Dspring.profiles.include=${SPRING_PROFILES_INCLUDE}
2
OrangeDog

これは、addingシステムenvまたはjvmargからプログラムで追加されたアクティブプロファイルの例です。

@Configuration
public class ApplicationInitializer implements WebApplicationInitializer, ApplicationContextInitializer<ConfigurableWebApplicationContext> {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("contextInitializerClasses", this.getClass().getCanonicalName());
    }

    @Override
    public void initialize(ConfigurableWebApplicationContext applicationContext) {
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        environment.addActiveProfile(System.getProperty("myProperty"));
        environment.addActiveProfile(System.getEnv("myProperty"));
    }
}
0
radekpakula