Как добавить профиль активной пружины из переменной среды?

До сих пор я устанавливаю следующую переменную среды в моем ~/.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.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/AbstractEnvironment.html

Другие вопросы по тегам