0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Приложения, разрабатываемые программистами, запускаются в разных окружениях (или, как говорят, средах), которые требуют разных настроек для своей работы. Например, локально, на своей машине разработчик может использовать одну базу данных, а в продакшене другую. То же самое касается настроек логирования, правил безопасности и всех остальных аспектов работы приложения.</p>
1
<p>Приложения, разрабатываемые программистами, запускаются в разных окружениях (или, как говорят, средах), которые требуют разных настроек для своей работы. Например, локально, на своей машине разработчик может использовать одну базу данных, а в продакшене другую. То же самое касается настроек логирования, правил безопасности и всех остальных аспектов работы приложения.</p>
2
<p>Возможность иметь свои наборы параметров под разные окружения в Spring Boot реализуется с помощью механизмов профайлов (Profiles). С помощью профайлов мы можем включать специфические бины или параметры конфигурации без необходимости изменения исходного кода.</p>
2
<p>Возможность иметь свои наборы параметров под разные окружения в Spring Boot реализуется с помощью механизмов профайлов (Profiles). С помощью профайлов мы можем включать специфические бины или параметры конфигурации без необходимости изменения исходного кода.</p>
3
<h2>Среды разработки</h2>
3
<h2>Среды разработки</h2>
4
<p>Как минимум выделяют две среды разработки:</p>
4
<p>Как минимум выделяют две среды разработки:</p>
5
<ul><li>Продакшен (Production). Место, где запускается проект для его реальной работы. Как правило, это происходит в облаках Amazon, Yandex или Google.</li>
5
<ul><li>Продакшен (Production). Место, где запускается проект для его реальной работы. Как правило, это происходит в облаках Amazon, Yandex или Google.</li>
6
<li>Девелопмент (Development). Почти всегда локальная машина разработчика. Обычно среда одна, даже если разработчиков больше одного человека.</li>
6
<li>Девелопмент (Development). Почти всегда локальная машина разработчика. Обычно среда одна, даже если разработчиков больше одного человека.</li>
7
</ul><p>Кроме указанных, часто, добавляют среду Staging. Это предпродакшен среда, где имитируется окружение, максимально приближенное к продакшену. Эту среду используют для тестирования приложения перед тем как выполнить его деплой на продакшен.</p>
7
</ul><p>Кроме указанных, часто, добавляют среду Staging. Это предпродакшен среда, где имитируется окружение, максимально приближенное к продакшену. Эту среду используют для тестирования приложения перед тем как выполнить его деплой на продакшен.</p>
8
<p>Итого, в типовых ситуациях, мы можем говорить о трех средах, для которых в Spring Boot будут определены три профайла:</p>
8
<p>Итого, в типовых ситуациях, мы можем говорить о трех средах, для которых в Spring Boot будут определены три профайла:</p>
9
<ul><li>production</li>
9
<ul><li>production</li>
10
<li>development</li>
10
<li>development</li>
11
<li>staging</li>
11
<li>staging</li>
12
</ul><h2>Активация профайла</h2>
12
</ul><h2>Активация профайла</h2>
13
<p>Активация профайла выполняется двумя основными способами.</p>
13
<p>Активация профайла выполняется двумя основными способами.</p>
14
<ul><li><p>С помощью переменной окружения SPRING_PROFILES_ACTIVE</p>
14
<ul><li><p>С помощью переменной окружения SPRING_PROFILES_ACTIVE</p>
15
</li>
15
</li>
16
<li><p>С помощью аргумента во время запуска приложения</p>
16
<li><p>С помощью аргумента во время запуска приложения</p>
17
</li>
17
</li>
18
</ul><h2>Формирование профайла</h2>
18
</ul><h2>Формирование профайла</h2>
19
<p>Аннотация @Profile указанная для @Component или @Configuration указывает на то, что эти классы должны использоваться только в определенном окружении:</p>
19
<p>Аннотация @Profile указанная для @Component или @Configuration указывает на то, что эти классы должны использоваться только в определенном окружении:</p>
20
<p>Таким образом можно реализовать подмену как настроек, так и реализацию каких-то классов.</p>
20
<p>Таким образом можно реализовать подмену как настроек, так и реализацию каких-то классов.</p>
21
<p>Конфигурационные параметры предпочтительно подменять с помощью файлов, специфичных для своих профилей:<em>application-{profile}.yml</em>расположенных рядом с оригинальным<em>application.yml</em>. Например:</p>
21
<p>Конфигурационные параметры предпочтительно подменять с помощью файлов, специфичных для своих профилей:<em>application-{profile}.yml</em>расположенных рядом с оригинальным<em>application.yml</em>. Например:</p>
22
<ul><li><em>application-production.yml</em></li>
22
<ul><li><em>application-production.yml</em></li>
23
<li><em>application-staging.yml</em></li>
23
<li><em>application-staging.yml</em></li>
24
</ul><p>Наличие файлов специфичных для разных окружений не отменяет наличие общего<em>application.yml</em>, в котором полезно оставлять общие настройки, чтобы не дублировать их в каждом профайле.</p>
24
</ul><p>Наличие файлов специфичных для разных окружений не отменяет наличие общего<em>application.yml</em>, в котором полезно оставлять общие настройки, чтобы не дублировать их в каждом профайле.</p>