Belajar Quarkus - Configuration & Profiles
Episode 8 of 24

Belajar Quarkus - Configuration & Profiles

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Konfigurasi dengan application.properties dan application.yaml

Format application.properties

File application.properties di src/main/resources adalah cara paling umum. Formatnya key=value:

application.properties
quarkus.http.port=8080
quarkus.application.name=belajar-quarkus
greeting.message=Halo dari properties
quarkus.log.level=INFO

Nilai kustom seperti greeting.message bisa dibaca dari kode memakai @ConfigProperty:

JavaMembaca config dari kode
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.

Format application.yaml

Quarkus mendukung YAML setelah extension quarkus-config-yaml ditambahkan:

Tambahkan dukungan YAML
./mvnw quarkus:add-extension -Dextensions=config-yaml

Lalu buat src/main/resources/application.yaml:

application.yaml
quarkus:
  http:
    port: 8080
  application:
    name: belajar-quarkus
greeting:
  message: Halo dari YAML

YAML lebih mudah dibaca untuk konfigurasi berjenjang. Perintah ./mvnw quarkus:add-extension -Dextensions=config-yaml wajib dijalankan sebelum memakai file YAML.

Environment-Specific Config dan Profile Activation

Profile Quarkus

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>.:

Konfigurasi per 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.

Custom Profile

Kalian juga bisa membuat profile kustom seperti %staging.. Saat aplikasi dijalankan dengan QUARKUS_PROFILE=staging, seluruh key berprefix %staging. aktif.

Externalized Config dari Env Var dan Secrets

Environment Variable Mapping

Setiap config property dipetakan ke environment variable dengan aturan: titik jadi garis bawah, semua huruf kapital. Contoh quarkus.http.port menjadi QUARKUS_HTTP_PORT.

Set konfigurasi via env var
export QUARKUS_HTTP_PORT=9000
export GREETING_MESSAGE="Halo dari environment"
./mvnw quarkus:dev

Env var mengalahkan nilai di application.properties. Ini cara paling umum men-deploy aplikasi ke berbagai environment tanpa mengubah file.

Secrets dan Keamanan

Jangan pernah menyimpan secret di application.properties. Gunakan environment variable, Kubernetes secrets, atau vault. Pola standar di container:

Secret di Kubernetes
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:

Referensi env untuk secret
quarkus.datasource.password=${DB_PASSWORD}

Sintaks ${DB_PASSWORD} mengambil nilai dari environment variable saat runtime — nilainya tidak pernah ditulis di repository.

Best Practice Manajemen Konfigurasi untuk Produksi

@ConfigMapping untuk Konfigurasi Terstruktur

Untuk konfigurasi kustom yang banyak, gunakan @ConfigMapping — interface yang mengelompokkan key secara aman:

JavaConfig mapping terstruktur
import io.smallrye.config.ConfigMapping;
import java.util.Optional;
 
@ConfigMapping(prefix = "greeting")
public interface GreetingConfig {
    String message();
    Optional<Integer> retries();
}

Dengan YAML:

Konfigurasi untuk mapping
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.

Aturan Emas

  • Pisahkan nilai berubah-ubah dari kode; konfigurasi hidup di luar source.
  • Gunakan profile untuk dev, test, staging, dan prod.
  • Secret hanya lewat env var, secret store, atau mount file.
  • Validasi config saat startup agar misconfiguration terdeteksi cepat.
  • Dokumentasikan setiap key kustom di README atau config reference.

Penutup

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.
  • Profile dev, test, dan prod mengaktifkan nilai berbeda secara otomatis.
  • Prefix %dev., %test., %prod. memisahkan konfigurasi per environment.
  • Env var dipetakan otomatis: quarkus.http.port jadi QUARKUS_HTTP_PORT.
  • Secret jangan pernah di-commit; gunakan env var atau Kubernetes Secret.
  • ${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.