Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Настройки и профили

Настройки — это значения, которые не стоит зашивать в код: название блога, число постов на странице, адрес базы данных. Они могут отличаться на компьютере разработчика и на сервере. В 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> для необязательной настройки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.