Настройки и профили
Настройки — это значения, которые не стоит зашивать в код: название блога, число постов на странице, адрес базы данных. Они могут отличаться на компьютере разработчика и на сервере. В Quarkus все настройки лежат в одном файле src/main/resources/application.properties, а читаются через стандарт MicroProfile Config.
Файл настроек
Генератор уже создал пустой файл. Добавьте в него свои ключи:
# src/main/resources/application.properties
blog.title=Блог Анны
blog.page-size=10Формат простой: ключ=значение, по одной настройке в строке. Свои ключи принято начинать с общего префикса, здесь — blog.. Ключи самого Quarkus начинаются с quarkus., например quarkus.http.port=8080.
Чтение настройки в коде
Значение внедряется в поле бина через @ConfigProperty. Создадим ресурс с информацией о блоге:
// src/main/java/com/example/blog/InfoResource.java
package com.example.blog;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@Path("/info")
public class InfoResource {
@ConfigProperty(name = "blog.title")
String title;
@ConfigProperty(name = "blog.page-size", defaultValue = "20")
int pageSize;
@GET
public String info() {
return title + ", постов на странице: " + pageSize;
}
}Quarkus сам переводит текст из файла в нужный тип: int, boolean, Duration и другие. defaultValue используется, если ключа в файле нет.
curl http://localhost:8080/infoОтвет: Блог Анны, постов на странице: 10.
Профили
Профиль — это режим, в котором запущено приложение. Их три:
| Профиль | Когда включается |
|---|---|
dev | ./mvnw quarkus:dev |
test | Запуск тестов |
prod | Запуск собранного приложения |
Чтобы значение действовало только в одном профиле, перед ключом пишут %имя-профиля.:
# src/main/resources/application.properties
blog.title=Блог Анны
blog.page-size=10
%dev.blog.title=Блог Анны (разработка)В dev mode /info вернёт Блог Анны (разработка), постов на странице: 10, а в собранном приложении — Блог Анны, .... Так обычно настраивают разные базы данных для разработки и для сервера.
Переменные окружения
Любую настройку можно переопределить переменной окружения, не трогая файл. Имя переменной — ключ в верхнем регистре, где точки и дефисы заменены на _: blog.title превращается в BLOG_TITLE, quarkus.http.port — в QUARKUS_HTTP_PORT.
BLOG_TITLE="Блог Олега" java -jar target/quarkus-app/quarkus-run.jarТеперь /info ответит Блог Олега, .... Переменные окружения сильнее, чем application.properties, поэтому пароли и адреса серверов задают именно так, а в файле оставляют безопасные значения для разработки.
Частая ошибка
Если ключа нет ни в файле, ни в окружении, а defaultValue не задан, приложение не запустится. Например, для поля с @ConfigProperty(name = "blog.owner"):
ConfigurationException: Failed to load config value of type class java.lang.String for: blog.owner
...
SRCFG00014: The config property blog.owner is required but it could not be found in any config source
Это защита: лучше упасть при старте, чем работать с пустым значением. Добавьте ключ в файл, задайте defaultValue или используйте тип Optional<String> для необязательной настройки.