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

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

105 голосов | спросил Bobo 14 FebruaryEurope/MoscowbTue, 14 Feb 2012 00:50:18 +0400000000amTue, 14 Feb 2012 00:50:18 +040012 2012, 00:50:18

4 ответа


0

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

@Autowired
Environment env;

Environment предлагает:

ответил aweigold 14 FebruaryEurope/MoscowbTue, 14 Feb 2012 01:08:19 +0400000000amTue, 14 Feb 2012 01:08:19 +040012 2012, 01:08:19
0

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

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

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

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

... activeProfile теперь содержит «Unknown», если не удалось разрешить spring.profiles.active

ответил MartinMlima 29 Jpm1000000pmMon, 29 Jan 2018 14:40:46 +030018 2018, 14:40:46
0

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

Среда 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") Вот еще информация об этом методе: весенние профили

ответил anataliocs 9 Jpm1000000pmMon, 09 Jan 2017 20:40:57 +030017 2017, 20:40:57
0

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

ответил Arnout Engelen 13 22012vEurope/Moscow11bEurope/MoscowTue, 13 Nov 2012 17:43:18 +0400 2012, 17:43:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132