← Назад к вопросам

Как называется часть, содержащая конфигурацию в Spring Boot

1.0 Junior🔥 101 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Как называется часть, содержащая конфигурацию в Spring Boot

Ответ: application.properties / application.yml (или resources папка)

В Spring Boot конфигурация хранится в специальном файле в папке src/main/resources/:

1. application.properties

Это основной файл конфигурации в формате key-value:

# Сервер
server.port=8080
server.servlet.context-path=/api

# База данных
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

# Логирование
logging.level.root=INFO
logging.level.com.myapp=DEBUG

# Прочее
spring.application.name=my-application
spring.profiles.active=dev

2. application.yml (YAML альтернатива)

Возможно использовать YAML формат (более читаемый для иерархичной конфигурации):

server:
  port: 8080
  servlet:
    context-path: /api

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  
logging:
  level:
    root: INFO
    com.myapp: DEBUG

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

Для разных окружений используются профильные файлы:

src/main/resources/
  ├── application.properties         # общая конфигурация
  ├── application-dev.properties     # для разработки
  ├── application-prod.properties    # для production
  └── application-test.properties    # для тестов

Активировать профиль:

spring.profiles.active=dev

Обычно это передаётся переменной окружения:

java -jar app.jar --spring.profiles.active=prod
export SPRING_PROFILES_ACTIVE=prod

4. Использование конфигурации в коде

// Способ 1: @Value
@Component
public class AppConfig {
    @Value("${server.port}")
    private int port;
    
    @Value("${spring.datasource.url}")
    private String dbUrl;
}

// Способ 2: @ConfigurationProperties (рекомендуется)
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private int timeout;
    
    // getters и setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

// application.yml
// app:
//   name: MyApp
//   timeout: 30

5. Переменные окружения

Spring Boot автоматически подхватывает переменные окружения:

export SERVER_PORT=9090
export SPRING_DATASOURCE_URL=jdbc:mysql://prod-db:3306/mydb

java -jar app.jar
# Свойства из переменных окружения переопределят application.properties

6. Иерархия конфигурации (приоритет)

Spring Boot использует следующий порядок (от самого высокого приоритета):

  1. Параметры командной строки
  2. Переменные окружения (SPRING_*)
  3. application-{profile}.properties / application-{profile}.yml
  4. application.properties / application.yml
  5. Значения по умолчанию

Пример:

# Командная строка имеет наивысший приоритет
java -jar app.jar --server.port=9090 --spring.profiles.active=prod

7. Пример полной конфигурации

spring:
  application:
    name: bank-service
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: false
  datasource:
    url: jdbc:postgresql://localhost:5432/bankdb
    username: postgres
    password: ${DB_PASSWORD}  # из переменной окружения
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
  cache:
    type: redis
    redis:
      host: localhost
      port: 6379

server:
  port: ${SERVER_PORT:8080}  # default 8080
  servlet:
    context-path: /api/v1
  shutdown: graceful
  tomcat:
    threads:
      max: 200

logging:
  level:
    root: INFO
    com.myapp: DEBUG
    org.springframework.web: WARN
  file:
    name: logs/app.log
  logback:
    rollingpolicy:
      max-file-size: 10MB
      max-history: 30

app:
  jwt:
    secret: ${JWT_SECRET}
    expiration: 3600
  email:
    enabled: true
    host: smtp.gmail.com
    port: 587

8. Best Practices

// ✅ ПРАВИЛЬНО: использовать @ConfigurationProperties
@Configuration
@ConfigurationProperties(prefix = "app.mail")
public class MailProperties {
    private String host;
    private int port;
    private boolean enabled;
    
    // getters/setters
}

// ❌ НЕПРАВИЛЬНО: раскидано @Value по коду
@Service
public class BadService {
    @Value("${app.mail.host}")
    private String host;
    
    @Value("${app.mail.port}")
    private int port;
}

// ✅ ПРАВИЛЬНО: используйте для secrets переменные окружения
spring:
  datasource:
    password: ${DB_PASSWORD}  # НЕ хардкодьте пароли!

// ❌ НЕПРАВИЛЬНО
// spring.datasource.password=secret123

Резюме

Основная часть конфигурации в Spring Boot:

  • Находится в файле application.properties или application.yml
  • Расположена в src/main/resources/
  • Может быть переопределена переменными окружения или параметрами командной строки
  • Использует профили для разных окружений (dev, prod, test)
  • Доступна в коде через @Value или @ConfigurationProperties

Это корневой источник настроек вашего Spring Boot приложения.