Prinsip Utama Konfigurasi Spring Boot
Konfigurasi Spring Boot yang efektif harus memisahkan logika aplikasi dari pengaturan lingkungan. Praktik terbaik adalah menghindari hardcoding nilai dalam kode sumber dan memanfaatkan hierarki eksternalitas yang disediakan oleh Spring Framework. Gunakan @ConfigurationProperties untuk memetakan properti ke objek Java yang terikat tipe (type-safe), yang jauh lebih unggul dibandingkan penggunaan @Value untuk konfigurasi kompleks.
Hierarki Prioritas Konfigurasi
Spring Boot memuat properti dari berbagai lokasi dengan urutan prioritas tertentu. Memahami urutan ini krusial untuk menghindari konflik konfigurasi:
| Prioritas | Sumber Konfigurasi |
|---|---|
| 1 | Command line arguments |
| 2 | SPRING_APPLICATION_JSON |
| 3 | Profile-specific application properties (application-{profile}.yml) |
| 4 | Application properties (application.yml) |
| 5 | Default properties (SpringApplication.setDefaultProperties) |
Implementasi Type-Safe Configuration
Alih-alih menggunakan @Value secara berulang, gunakan @ConfigurationProperties untuk mengelompokkan properti terkait. Berikut adalah contoh implementasi yang bersih:
@ConfigurationProperties(prefix = "app.service")
public record ServiceProperties(String host, int port, boolean enabled) {}
// Registrasi di kelas konfigurasi utama
@EnableConfigurationProperties(ServiceProperties.class)
@Configuration
public class AppConfig {}Manajemen Rahasia dan Keamanan
Jangan pernah menyimpan kredensial (API Key, password database) dalam file application.yml yang masuk ke sistem kontrol versi (Git). Gunakan pendekatan berikut:
- Environment Variables: Gunakan variabel lingkungan untuk nilai sensitif di lingkungan produksi.
- Spring Cloud Vault: Integrasikan dengan HashiCorp Vault untuk manajemen rahasia terpusat.
- Encrypted Properties: Gunakan Jasypt untuk mengenkripsi nilai sensitif di dalam file properti jika integrasi Vault belum memungkinkan.
Strategi Profil Lingkungan
Gunakan profil (dev, test, prod) untuk memisahkan konfigurasi antar lingkungan. Pastikan file application-prod.yml hanya berisi perbedaan spesifik untuk produksi, sementara pengaturan umum tetap berada di application.yml. Hindari duplikasi kode dengan memanfaatkan fitur spring.profiles.include untuk memuat konfigurasi dasar secara otomatis.
Tips Troubleshooting
Jika aplikasi gagal memuat konfigurasi, aktifkan debug=true pada application.properties atau jalankan aplikasi dengan argumen --debug. Spring Boot akan mencetak ConditionEvaluationReport yang merinci properti mana yang dimuat dan dari sumber mana properti tersebut berasal.