Что можно конфигурировать в Spring Boot приложении?

«Что можно конфигурировать в Spring Boot приложении?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring Boot предлагает гибкую модель конфигурации "из коробки". Основные аспекты:

1. Основные файлы конфигурации: Настройки определяются в application.properties или application.yml с автоматическим связыванием (binding).

# application.yml
server:
  port: 8081
  servlet:
    context-path: /api

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb
    username: admin
    password: secret
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: true

2. Профили (Profiles): Разделение конфигурации для разных сред (dev, test, prod).

@Configuration
@Profile("dev")
public class DevConfig {
    // Бинды только для среды разработки
}

Активация: --spring.profiles.active=dev,debug

3. Типобезопасная конфигурация с @ConfigurationProperties:

@ConfigurationProperties(prefix = "app.mail") // Связывает свойства с префиксом app.mail
@Data // Lombok для геттеров/сеттеров
public class MailProperties {
    private String host = "smtp.default.com"; // Значение по умолчанию
    private int port;
    private String from;
}

4. Автоконфигурация (Auto-Configuration): Spring Boot автоматически настраивает бины на основе classpath. Например, наличие spring-boot-starter-data-jpa и драйвера БД автоматически настраивает DataSource и JpaTransactionManager.

5. Внешняя конфигурация (Externalized Configuration): Приоритет источников конфигурации (от высшего к низшему):

  1. Аргументы командной строки (--server.port=9090).
  2. Переменные окружения (SPRING_DATASOURCE_URL).
  3. Файлы конфигурации (application-{profile}.yml).

6. Другие часто конфигурируемые компоненты:

  • Логирование: Через logback-spring.xml или настройки logging.level.*.
  • Безопасность: Настройка Spring Security (правила доступа, провайдеры аутентификации).
  • Кеширование: Включение и настройка (например, Redis, Caffeine).
  • Мониторинг и метрики: Использование Spring Boot Actuator и интеграция с Prometheus/Grafana.