HTML Diff
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>