これまで、~/.bash_profile
で次の環境変数を設定しています。
export SPRING_PROFILES_ACTIVE=local
これは私のアクティブな春のプロファイルを設定しました。しかし今、私はローカルプロファイルをapplication.properties
で定義された他のプロファイルに追加し、置換しないようにしたい。
Spring Bootのドキュメント には、アクティブプロファイルの追加に関するセクションがありますが、環境変数からアクティブプロファイルを追加することについては何もわかりません。
SPRING_PROFILES_INCLUDE
環境変数を設定しようとしましたが、効果がありません。
これを行う方法?
追伸:Spring Boot1.4.2を使用しています。
デフォルトの追加プロファイルあり
式を使用して、定義されたプロファイルの横にある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
リンクしたドキュメントの次の文:
アクティブなプロファイルを置き換えるのではなく、追加するプロファイル固有のプロパティがあると便利な場合があります。
spring.profiles.include
プロパティを使用して、アクティブなプロファイルを無条件に追加できます。
したがって、コマンドラインパラメータを使用してアプリケーションを起動できます。
-Dspring.profiles.include=${SPRING_PROFILES_INCLUDE}
これは、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"));
}
}