Episode ini membahas konfigurasi Quarkus: application.properties dan application.yaml, profile spesifik environment, externalized config dari environment variable dan secrets, hingga best practice manajemen konfigurasi untuk produksi.

Aplikasi yang baik tidak meng-hardcode nilai konfigurasi di dalam kode. Port, URL database, kredensial, dan fitur toggle seharusnya hidup di luar kode sehingga aplikasi bisa berjalan di banyak environment tanpa rekompilasi.
Episode 8 membahas sistem konfigurasi Quarkus secara menyeluruh: application.properties dan application.yaml, profile untuk environment berbeda, externalized config dari environment variable, secrets, dan config maps, serta best practice manajemen konfigurasi di produksi.
File application.properties di src/main/resources adalah cara paling umum. Formatnya key=value:
quarkus.http.port=8080
quarkus.application.name=belajar-quarkus
greeting.message=Halo dari properties
quarkus.log.level=INFONilai kustom seperti greeting.message bisa dibaca dari kode memakai @ConfigProperty:
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@ApplicationScoped
public class GreetingService {
@ConfigProperty(name = "greeting.message")
String message;
public String sapa() {
return message;
}
}@ConfigProperty(name = "greeting.message") menginjeksi nilai konfigurasi langsung ke field. Jika key tidak ada dan tidak ada default, aplikasi gagal start — perilaku yang bagus untuk mencegah typo.
Quarkus mendukung YAML setelah extension quarkus-config-yaml ditambahkan:
./mvnw quarkus:add-extension -Dextensions=config-yamlLalu buat src/main/resources/application.yaml:
quarkus:
http:
port: 8080
application:
name: belajar-quarkus
greeting:
message: Halo dari YAMLYAML lebih mudah dibaca untuk konfigurasi berjenjang. Perintah ./mvnw quarkus:add-extension -Dextensions=config-yaml wajib dijalankan sebelum memakai file YAML.
Quarkus memiliki tiga profile bawaan: dev, test, dan prod. Setiap profile diaktifkan otomatis sesuai mode: dev saat quarkus:dev, test saat test, dan prod saat build. Konfigurasi per profile memakai prefix %<nama-profile>.:
greeting.message=default
%dev.greeting.message=Halo di development
%prod.greeting.message=Halo di produksi
quarkus.profile=prod%dev.greeting.message hanya berlaku saat profile dev aktif. Nilai umum ditulis tanpa prefix. Untuk menimpa profile secara manual, set quarkus.profile atau env var QUARKUS_PROFILE.
Kalian juga bisa membuat profile kustom seperti %staging.. Saat aplikasi dijalankan dengan QUARKUS_PROFILE=staging, seluruh key berprefix %staging. aktif.
Setiap config property dipetakan ke environment variable dengan aturan: titik jadi garis bawah, semua huruf kapital. Contoh quarkus.http.port menjadi QUARKUS_HTTP_PORT.
export QUARKUS_HTTP_PORT=9000
export GREETING_MESSAGE="Halo dari environment"
./mvnw quarkus:devEnv var mengalahkan nilai di application.properties. Ini cara paling umum men-deploy aplikasi ke berbagai environment tanpa mengubah file.
Jangan pernah menyimpan secret di application.properties. Gunakan environment variable, Kubernetes secrets, atau vault. Pola standar di container:
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
DB_PASSWORD: "super-rahasia"Di application.properties cukup referensikan nama key, nilai aslinya datang dari luar:
quarkus.datasource.password=${DB_PASSWORD}Sintaks ${DB_PASSWORD} mengambil nilai dari environment variable saat runtime — nilainya tidak pernah ditulis di repository.
Untuk konfigurasi kustom yang banyak, gunakan @ConfigMapping — interface yang mengelompokkan key secara aman:
import io.smallrye.config.ConfigMapping;
import java.util.Optional;
@ConfigMapping(prefix = "greeting")
public interface GreetingConfig {
String message();
Optional<Integer> retries();
}Dengan YAML:
greeting:
message: Halo dari mapping
retries: 3@ConfigMapping memberi type-safe access, validasi saat start, dan mudah di-test. Ini pola yang direkomendasikan untuk aplikasi besar.
Episode 8 membuat konfigurasi aplikasi kalian fleksibel dan aman: memahami application.properties dan application.yaml, profile bawaan dan custom, externalized config dari environment variable, secret management, serta @ConfigMapping untuk konfigurasi terstruktur dan type-safe.
Inti yang harus dibawa pulang:
application.properties dan application.yaml adalah pusat konfigurasi.%dev., %test., %prod. memisahkan konfigurasi per environment.quarkus.http.port jadi QUARKUS_HTTP_PORT.${ENV_VAR} membaca nilai eksternal saat runtime.@ConfigMapping memberikan konfigurasi kustom yang type-safe.Di episode 9 selanjutnya kita akan membahas observability dan health — SmallRye Health untuk readiness dan liveness probes, SmallRye Metrics dan Micrometer, konfigurasi logging dan structured logging, serta custom health checks.