Как получить текущий активный / заданный по умолчанию профиль среды программным способом в Spring? - PullRequest
114 голосов
/ 14 февраля 2012

Мне нужно кодировать другую логику, основанную на другом текущем профиле средыКак вы можете получить текущие активные и стандартные профили из Spring?

Ответы [ 5 ]

170 голосов
/ 14 февраля 2012

Вы можете автоматически подключить Environment

@Autowired
Environment env;

Environment предложений:

43 голосов
/ 29 января 2018

Расширение приятного простого ответа User1648825 (я не могу комментировать, и мое редактирование было отклонено):

@Value("${spring.profiles.active}")
private String activeProfile;

Это может вызвать исключение IllegalArgumentException, если профили не заданы (я получаю нулевое значение).Это может быть хорошо, если вам нужно это установить;если не использовать синтаксис «по умолчанию» для @Value, то есть:

@Value("${spring.profiles.active:Unknown}")
private String activeProfile;

... activeProfile теперь содержит «Неизвестно», если spring.profiles.active не может быть разрешен

33 голосов
/ 09 января 2017

Вот более полный пример.

Окружение Autowire

Сначала вы захотите автоматически подключить компонент среды.

@Autowired
private Environment environment;

Проверьте, существуют ли профили в активных профилях

Затем вы можете использовать getActiveProfiles(), чтобы узнать, существует ли профиль в списке активных профилей.Вот пример, который берет String[] из getActiveProfiles(), получает поток из этого массива, а затем использует сопоставления для проверки нескольких профилей (без учета регистра), которые возвращают логическое значение, если они существуют.

//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"). Подробнее об этой технике: Пружинные профили

22 голосов
/ 18 сентября 2017
@Value("${spring.profiles.active}")
private String activeProfile;

Это работает, и вам не нужно реализовывать EnvironmentAware. Но я не знаю недостатков этого подхода.

13 голосов
/ 13 ноября 2012

Если вы не используете автоматическое подключение, просто введите EnvironmentAware

...