· Краткие факты
· Сделать профиль активным
Программно, в классе
Контекстный параметр в 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-компонентом, который не относится ни к какому другому конкретному профилю.