Gymterview
junior

Как устроена конфигурация в application.properties / application.yml?

Spring Boot автоматически загружает файл application.properties (или application.yml) из каталога src/main/resources.

Пример application.properties
server.port=8080
spring.application.name=my-app

# Подключение к БД
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=admin
spring.datasource.password=${DB_PASSWORD}

# JPA / Hibernate
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
spring.jpa.open-in-view=false

# Логирование
logging.level.root=INFO
logging.level.com.example=DEBUG
Пример application.yml
server:
  port: 8080

spring:
  application:
    name: my-app
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb
    username: admin
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: true
    open-in-view: false

Приоритет загрузки свойств (от низшего к высшему)

  1. Значения по умолчанию (@Value("${prop:default}"))
  2. application.properties в JAR
  3. application-{profile}.properties в JAR
  4. application.properties вне JAR
  5. application-{profile}.properties вне JAR
  6. Аргументы командной строки (--server.port=9090)
  7. Переменные окружения (SERVER_PORT=9090)

Типизированная конфигурация с @ConfigurationProperties

Пример
@Configuration
@ConfigurationProperties(prefix = "app.mail")
@Validated
public class MailProperties {
    @NotBlank
    private String host;
    private int port = 587;
    private String username;
    // геттеры и сеттеры
}

На собеседовании: важно знать приоритет загрузки свойств и @ConfigurationProperties. Частая ошибка – хранить пароли прямо в application.properties, которое попадает в Git. Используйте переменные окружения или Vault.