Spring Boot Configuration: Best Practices & Implementation Guide

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:

PrioritasSumber Konfigurasi
1Command line arguments
2SPRING_APPLICATION_JSON
3Profile-specific application properties (application-{profile}.yml)
4Application properties (application.yml)
5Default 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.