Как добавить профиль активной пружины из переменной среды?
До сих пор я устанавливаю следующую переменную среды в моем ~/.bash_profile
:
export SPRING_PROFILES_ACTIVE=local
Это установило мой активный весенний профиль. Но теперь я хочу добавить локальный профиль в другие профили, определенные в application.properties
и не заменить их.
В документации по Spring Boot есть раздел о добавлении активного профиля, но я ничего не вижу о добавлении активного профиля из переменной среды.
Я пытался установить SPRING_PROFILES_INCLUDE
переменная окружения, но это не имеет никакого эффекта.
Как это сделать?
PS: я использую Spring Boot 1.4.2.
5 ответов
С профилем добавления по умолчанию
Вы можете ввести свою собственную переменную среды в 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}
Это пример добавления программного дополнительного активного профиля из системного env или jvm arg.
@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"));
}
}
Это не способ Spring, но в некоторых случаях он также может быть полезен.
public static void main(String[] args) {
System.setProperty("spring.profiles.active", "local");
SpringApplication.run(MainApplication.class, args);
}
Для поддержки среды bash доступны следующие значения: SPRING_PROFILES_ACTIVE и SPRING_PROFILES_DEFAULT
нет, SPRING_PROFILES_INCLUDE
вам, вероятно, придется прибегнуть к командной строке -Dspring.profiles.include или программировать с помощью ConfigurableEnvironment.