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

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

Ответ 2

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

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

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

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

... activeProfile теперь содержит "Неизвестный", если не удалось разрешить spring.profiles.active

Ответ 3

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

Автотранспортная среда

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

@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") Профили позволяют выборочно настраивать параметры на основе переданного параметра или параметра среды. Вот больше информации об этой технике: Spring Profiles

Ответ 4

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

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

Ответ 5

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