Мне нужно кодировать другую логику, основанную на разных текущих профилях среды Как вы можете получить текущие активные и стандартные профили из Spring?
155
Мне нужно кодировать другую логику, основанную на разных текущих профилях среды Как вы можете получить текущие активные и стандартные профили из Spring?
Ответы:
Вы можете автоматически подключить
Environment
Environment
предложения:String[] getActiveProfiles()
,String[] getDefaultProfiles()
, иboolean acceptsProfiles(String... profiles)
источник
Расширение приятного простого ответа User1648825 (я не могу комментировать, и моя правка была отклонена):
Это может вызвать исключение IllegalArgumentException, если профили не заданы (я получаю нулевое значение). Это может быть хорошей вещью, если вам нужно ее установить; если нет, используйте синтаксис «по умолчанию» для @Value, то есть:
... activeProfile теперь содержит «Unknown», если не удалось разрешить spring.profiles.active
источник
Вот более полный пример.
Autowire Environment
Сначала вы захотите автоматически подключить компонент среды.
Проверьте, существуют ли профили в активных профилях
Затем вы можете использовать,
getActiveProfiles()
чтобы узнать, существует ли профиль в списке активных профилей. Вот пример, который беретString[]
fromgetActiveProfiles()
, получает поток из этого массива, а затем использует matchers для проверки нескольких профилей (без учета регистра), который возвращает логическое значение, если они существуют.Вы также можете достичь аналогичной функциональности, используя аннотации
@Profile("local")
Профили позволяют выборочную настройку на основе переданного параметра или параметра среды. Вот больше информации об этой технике: Spring Profilesисточник
Это работает, и вам не нужно реализовывать EnvironmentAware. Но я не знаю недостатков этого подхода.
источник
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
@Profile
. Приложения также могут использовать этоspring.profiles.include
свойство и могут программно устанавливать профили во время инициализации с помощьюConfigurableEnvironment
.Environment.getActiveProfiles()
получит полный список профилей, установленных с помощью любого из этих механизмов.Если вы не используете автопроводку, просто внедрите
EnvironmentAware
источник
Кажется, есть некоторый спрос на статический доступ к этому.
Это хак, но вы можете написать свой собственный класс, чтобы разоблачить его. Вы должны быть осторожны, чтобы убедиться, что ничто не будет вызываться
SpringContext.getEnvironment()
до того, как будут созданы все bean-компоненты, поскольку нет гарантии, когда будет создан этот компонент.источник