JavaRush /Курсы /Модуль 5. Spring /Лекция 174: Настройка Spring Boot микросервисов с конфигу...

Лекция 174: Настройка Spring Boot микросервисов с конфигурациями через application.yml

Модуль 5. Spring
18 уровень , 3 лекция
Открыта

Настало время углубиться в настройку Spring Boot приложений. Сегодня мы научимся организовывать конфигурации через application.yml, разберем преимущества YAML над .properties, освоим многопрофильные конфигурации и поймем, как применять различные настройки для разных окружений (например, dev, test, prod).


Что такое application.yml?

Когда мы изучали Docker Compose, мы уже сталкивались с YAML (YAML Ain't Markup Language). Напомним, это удобный формат для написания конфигурационных файлов. Его основные преимущества:

  • Читаемость: меньше "шума", чем в .properties (нет повторяющихся ключей для групп настроек).
  • Иерархическая структура: конфигурация легко группируется в виде дерева.
  • Поддержка сложных объектов: списки и вложенные структуры данных.

Для сравнения, конфигурация в .properties:


server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

И та же конфигурация в application.yml:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret

Согласитесь, application.yml выглядит менее загроможденным. Spring Boot поддерживает оба формата, но YAML чаще используется в современных проектах.


Работа Spring Boot с конфигурациями

Spring Boot автоматически подгружает конфигурационные файлы из директории src/main/resources. Самый распространенный файл для конфигурации — это application.yml. Он позволяет задать настройки приложения, такие как:

  • Порт сервера
  • Настройки подключения к базе данных
  • Настройки кеширования и безопасности

Spring Boot определяет параметры из файла и автоматически применяет их к соответствующим компонентам.


Преимущества использования application.yml

Использование application.yml дает несколько ключевых преимуществ:

  1. Иерархическая структура
    • Связанные параметры легко сгруппировать в единую секцию (например, настройки базы данных).
    • Легко читаемый формат для сложных конфигураций.
  2. Поддержка профилей
    • Удобное управление настройками для разных окружений — dev, test, prod.
  3. Поддержка списков
    • Например, вы можете указывать список URL-адресов в конфигурации.

Пример списка:

my-service:
  servers:
    - http://localhost:8081
    - http://localhost:8082
    - http://localhost:8083

Структурирование и группировка настроек

Иерархия в YAML позволяет логически упорядочить конфигурационные параметры.

Настройки сервера

Настроим порт для нашего микросервиса:


server:
port: 8080

Также можно задать свойства, связанные с кодировкой:

server:
  port: 8080
  spring:
    messages:
      encoding: UTF-8

Настройки базы данных

Подключение к базе данных — одна из самых частых задач в Spring Boot. Рассмотрим настройку:


  spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  • url — адрес базы данных.
  • ddl-auto — стратегия управления схемой базы данных (например, update, create-drop).
  • show-sql — позволяет выводить SQL-запросы в логи.

Профили конфигурации

В реальных проектах у нас обычно есть разные конфигурации для разработки (dev), тестирования (test) и производства (prod). Например:

  • На dev-среде используется база данных H2 (in-memory).
  • На prod-среде используется MySQL.

Spring Boot позволяет задавать такие настройки через профили.

Активный профиль указывается в application.yml:

spring:
  profiles:
    active: dev

Или можно передать профиль в аргументах командной строки:


java -Dspring.profiles.active=prod -jar myapp.jar

Разделение конфигурации по профилям

у каждого профиля может быть свой файл конфигурации, например:

  • application-dev.yml
  • application-prod.yml

Пример application-dev.yml:


  spring:
  datasource:
    url: jdbc:h2:mem:devdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create

Пример application-prod.yml:

spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/mydb
    username: admin
    password: securepassword
  jpa:
    hibernate:
      ddl-auto: validate

Конфигурация по умолчанию

Основной файл application.yml может содержать общие настройки:


  server:
  port: 8080
spring:
  jpa:
    show-sql: true

Spring Boot сначала подгружает application.yml, а затем профиль-специфические настройки (application-dev.yml или application-prod.yml), переопределяя свойства.


Практика: Настройка микросервиса с application.yml

Шаг 1: Создадим новый проект

Используйте Spring Initializr для создания проекта:
Dependencies: Spring Web, Spring Data JPA, MySQL Driver.

Запомните шутку: "Если не используете Spring Initializr, то вы слишком любите боль. Он существует, чтобы вы нажимали кнопку 'Generate'".

Шаг 2: Настроим application.yml

Добавьте файл application.yml в директорию src/main/resources:


server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

Шаг 3: Добавим профили

Создайте файлы application-dev.yml и application-prod.yml.

Пример: application-dev.yml:

spring:
  datasource:
    url: jdbc:h2:mem:devdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create

Пример: application-prod.yml:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/mydb
    username: admin
    password: securepassword

Установите активный профиль:


  spring:
  profiles:
    active: dev

Шаг 4: Реализуем простой REST API

Создайте контроллер:


@RestController
@RequestMapping("/api/customers")
public class CustomerController {

    @GetMapping
    public String getAllCustomers() {
        return "List of all customers!";
    }
}

Шаг 5: Запустим приложение

Запустите приложение и перейдите по адресу:
http://localhost:8081/api/customers.


Типичные ошибки

Некоторые моменты, которые часто вызывают сложности:

  1. Противоречивые конфигурации: если файл application.yml и профиль-специфический файл содержат противоречивые настройки, активный профиль переопределяет основную конфигурацию.
  2. Отсутствие активного профиля: не забудьте указать активный профиль через spring.profiles.active.
  3. Ошибки форматирования YAML: малейшая ошибка отступов может сломать приложение.

Для деплоя на реальные серверы обычно передают профиль через аргументы JVM (-Dspring.profiles.active=prod).


Теперь вы знаете, как настраивать application.yml, эффективно делить конфигурации на профили и применять их в микросервисах. YAML стал вашим другом в этом путешествии!

Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анастасия Уровень 112
20 января 2026
"Когда мы изучали Docker Compose..." а когда мы это делали? может я что-то пропустила ..