· Краткие факты
· Сделать профиль активным
∘ Программно, в классе
∘ Контекстный параметр в web.xml
∘ Переопределить JVM системный параметр
∘ Переменные среды
∘ Профиль Maven
∘ Аннотация активных профилей
∘ Непосредственно в свойствах
· Профиль по умолчанию
Профили похожи на мультивселенную. Это практически та же версия вашего кода, но в другом измерении. Когда вы переключаете профили, вы определяете путь, по которому пойдет ваш код. Каждое решение имеет значение в своей вселенной.
А если серьезно, то профили — это способы определения различного поведения вашего кода в разных обстоятельствах. Как и полиморфизм.
Мы разрабатываем использование профилей в Spring, используя простую аннотацию @Profile для классов или методов.
Краткие факты
Компоненты и профили. В аннотированном классе Configuration при создании компонента вы можете аннотировать его с помощью @Profile(“dev”), чтобы убедиться, что компонент создается только тогда, когда указанный профиль активен.
Несколько профилей: когда вы хотите, чтобы что-то соответствовало нескольким профилям, вы делаете это так, как список строк: @Profile({"dev", "qa"})⇒ это означает dev ИЛИ qa, а не оба
Что угодно, кроме этого профиля: @Profile(“!prod”)
Ни этот профиль, ни тот: @Profile({“!prod”, “!qa”})⇒ это гарантирует, что класс или bean-компонент используется только тогда, когда профиль НЕ ПРОД И НЕ КА
Делаем профиль активным
После того как вы объявите профиль, как вы сможете его использовать? Как мое приложение узнает, какой профиль включен и когда его запускать? Есть больше способов сообщить Spring, что вы используете профиль, а не другой.
Программно, в классе
- Используйте класс, который реализует WebApplicationInitializer и переопределяет метод onStartup для этого (в основном привязывая параметр spring.profiles.active к значению dev. Именно так вы фактически переопределяете свойства по умолчанию в Spring)
servljaetContext.setInitParameter( "spring.profiles.active", "dev");
- Объявите ConfigurableEnvironment и автоматически подключите его и просто установите активные профили напрямую. Это выглядит глупо и легко потеряться в коде. Мне буквально пришлось бы искать конкретно этот bean-компонент, который может быть автоматически подключен бог знает где. Не делайте этого. (Я имею в виду, что не могу сказать вам, что делать, но просто скажу, что вы можете быть ответом на вопрос «кто, во имя милого Иисуса, написал этот код и спрятал его здесь?»).
env.setActiveProfiles("dev");
Параметр контекста в web.xml
Это не было бы так распространено, так как новые Springs вступили в действие, однако он буквально определяет имя и значение параметра.
<context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>
Переопределить системный параметр JVM
Это, безусловно, самое распространенное, что я использовал. Свойства можно переопределить непосредственно в JVM и в зависимости от предпочитаемой вами IDE (и если эта IDE не Notes), вы можете сделать это довольно легко в «Редактировать свойства конфигурации запуска», и вы просто вставляете это туда
-Dspring.profiles.active=dev
Переменные среды
Переменные среды в среде Unix, что-то, что я надеюсь не использовать в ближайшее время, хотя macBook был бы довольно приятной сделкой
export spring_profiles_active=dev
Профиль Мейвена
Это, безусловно, самый ужасный способ, поскольку вам нужно написать всю настройку, чтобы это произошло, только для того, чтобы крошечный профиль «dev» был активен. А затем вы обязываете другого бедного разработчика копаться в файле pom (который по определению является подвалом приложения, некоторые люди очень боятся спускаться туда, и когда они это делают, они могут начать убегать оттуда так быстро, как они могут) , проверяя свои волосы пауков). Но вот оно:
- Создайте профили в pom
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <spring.profiles.active>dev</spring.profiles.active> </properties> </profile> <profile> <id>qa</id> <properties> <spring.profiles.active>qa</spring.profiles.active> </properties> </profile> </profiles>
- Создайте свойство переопределения в application.properties, которое на самом деле не переопределяет свойство, но указывает, откуда будет происходить переопределение.
[email protected]@
- Включить фильтрацию ресурсов в файле pom, иначе все будет впустую и Spring и глазом не моргнет
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ... </build>
- И на самом деле установите профиль, используя эту команду в приложении.
mvn clean package -Pqa
Аннотация активных профилей
Это работает для тестирования. Добавьте @ActiveProfiles("test") в тестовый класс и вуаля! Когда он работает, он работает с этим.
Непосредственно в свойствах
Вы можете напрямую указать значение свойства в файле application.properties или application.yml.
spring: profiles: active: dev
Профиль по умолчанию
Профиль по умолчанию — это…. профиль «по умолчанию». На самом деле он всегда активен, и другие профили активируются поверх него.
Могу ли я переопределить профиль по умолчанию? Да, теоретически, с профилями, которые вы установили поверх. Когда вы устанавливаете новый профиль в качестве активного, по умолчанию фактически не спит, Spring по-прежнему управляет всеми bean-компонентами, которые не принадлежат никакому другому профилю, но также управляет вещами, которые принадлежат профилю активного набора.
Что делает default? Если присутствует только default, он просто управляет каждым bean-компонентом, который не относится ни к какому другому конкретному профилю.