Настройки: properties и YAML
Порт сервера, адрес базы данных, название сайта — всё это не стоит зашивать в код. Такие значения хранят в файле настроек, и Spring Boot читает его при запуске. Тогда одну и ту же программу можно запускать с разными настройками на вашем компьютере и на сервере.
Два формата
Генератор создал application.properties. Тот же набор настроек можно записать в формате YAML:
# src/main/resources/application.properties
spring.application.name=blog
server.port=8080# src/main/resources/application.yaml
spring:
application:
name: blog
server:
port: 8080В YAML части имени через точку превращаются во вложенные блоки с отступом в два пробела. Spring читает оба файла одинаково. Дальше в курсе мы используем YAML: он нагляднее при большом числе настроек и, в отличие от .properties, читается в кодировке UTF-8 — русский текст в нём не ломается. Переименуйте файл в application.yaml и перепишите содержимое, как выше.
Свои настройки
Кроме настроек Spring можно добавить свои. Договоримся, что настройки блога начинаются с blog:
# src/main/resources/application.yaml
spring:
application:
name: blog
blog:
title: Блог Анны и Олега
contact-email: anna@example.comЧтение через @Value
// src/main/java/com/example/blog/AboutController.java
package com.example.blog;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AboutController {
private final String title;
private final String contactEmail;
public AboutController(@Value("${blog.title}") String title,
@Value("${blog.contact-email:info@example.com}") String contactEmail) {
this.title = title;
this.contactEmail = contactEmail;
}
@GetMapping("/api/about")
public String about() {
return title + " (" + contactEmail + ")";
}
}Выражение ${blog.title} Spring заменит значением из настроек. После двоеточия можно указать значение по умолчанию — оно сработает, если настройки нет. Запрос curl http://localhost:8080/api/about вернёт Блог Анны и Олега (anna@example.com).
Переопределение при запуске
Любую настройку можно поменять, не трогая файл:
./mvnw spring-boot:run -Dspring-boot.run.arguments=--server.port=9090
BLOG_TITLE="Тестовый блог" ./mvnw spring-boot:runПервая команда передаёт аргумент командной строки, вторая — переменную окружения. Имя переменной получается из имени настройки: точки и дефисы заменяются на _, буквы становятся заглавными (blog.title → BLOG_TITLE).
| Источник | Приоритет |
|---|---|
Аргументы командной строки --key=value | Самый высокий |
| Переменные окружения | Выше файла |
application.yaml и application.properties | Базовые значения |
Частая ошибка
Если записать русский текст в application.properties, он придёт в программу испорченным:
Ðлог ÐÐ½Ð½Ñ Ð¸ Ðлега (anna@example.com)Spring Boot читает файлы .properties в старой кодировке ISO-8859-1, а YAML — в UTF-8. Держите тексты на русском в application.yaml. И не оставляйте оба файла сразу: при одинаковых ключах значение из .properties побеждает, а после переименования выполните ./mvnw clean, чтобы старый файл не остался в папке target.