Мне нужно закодировать другую логику, основанную на другом текущем профиле среды. Как вы можете получить текущие активные и профили по умолчанию из Spring?
Как вы программным образом получаете текущий активный профиль/профиль по умолчанию в Spring?
Ответ 1
Вы можете автоматически подключить Environment
@Autowired
Environment env;
Environment
предлагает:
Ответ 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