Externalized Configuration Spring Boot: Panduan Teknis & Hierarki

Konsep Dasar Externalized Configuration

Externalized Configuration dalam Spring Boot adalah mekanisme untuk memisahkan konfigurasi aplikasi dari artefak kode (JAR/WAR). Dengan pendekatan ini, Anda dapat menjalankan aplikasi yang sama di lingkungan yang berbeda (Development, Staging, Production) tanpa perlu melakukan kompilasi ulang kode sumber.

Spring Boot menggunakan urutan prioritas (precedence) yang ketat untuk memuat properti. Jika properti yang sama didefinisikan di beberapa tempat, nilai dengan prioritas tertinggi akan menimpa nilai lainnya.

Tabel Prioritas Konfigurasi (Urutan dari Tertinggi ke Terendah)

PrioritasSumber Konfigurasi
1Command-line arguments
2SPRING_APPLICATION_JSON (JSON inline)
3Environment Variables
4Java System Properties (-D)
5OS Environment Variables
6File application-{profile}.properties/yml di luar JAR
7File application.properties/yml di dalam JAR
8@PropertySource pada class @Configuration
9Default properties (SpringApplication.setDefaultProperties)

Implementasi Teknis

Untuk mengakses konfigurasi, gunakan anotasi @Value atau @ConfigurationProperties. Berikut adalah contoh implementasi menggunakan @ConfigurationProperties yang lebih disarankan untuk konfigurasi kompleks.

@ConfigurationProperties(prefix = "app.server")
public class ServerProperties {
    private String host;
    private int port;
    // Getters and Setters
}

Langkah-langkah Konfigurasi Eksternal

  1. File Properties Eksternal: Tempatkan file application.properties di direktori yang sama dengan file JAR atau di sub-direktori /config.
  2. Environment Variables: Gunakan format APP_SERVER_HOST untuk menggantikan properti app.server.host. Spring Boot secara otomatis melakukan konversi format (relaxed binding).
  3. Command Line: Jalankan aplikasi dengan perintah: java -jar app.jar --app.server.port=8081.

Tips Troubleshooting

  • Gunakan Profile: Gunakan spring.profiles.active untuk memisahkan konfigurasi antar lingkungan.
  • Cek Debug: Jalankan aplikasi dengan flag --debug untuk melihat sumber mana yang memuat properti tertentu.
  • Keamanan: Jangan pernah menyimpan kredensial sensitif (password/API key) di dalam file properti. Gunakan Spring Cloud Vault atau environment variables yang dienkripsi.