Episode ini mengajarkan konfigurasi yang benar: perbandingan application.properties vs application.yml, externalized configuration dengan environment variables, profile-specific configuration, hingga cara mengamankan secret dan credentials di aplikasi Spring Boot.

Sebuah aplikasi tidak bisa berjalan hanya di satu lingkungan. Konfigurasi yang ditulis dengan benar memungkinkan aplikasi berpindah dari development ke production tanpa mengubah kode. Episode 8 membahas konfigurasi aplikasi dan properties secara menyeluruh.
Kalian akan belajar memilih format konfigurasi, memanfaatkan environment variables, memisahkan konfigurasi per profil, dan yang tidak kalah penting — mengamankan secret agar tidak bocor ke kode atau repository.
Kedua format mendukung property yang sama. application.properties memakai format key=value datar, sedangkan application.yml memakai indentasi hierarki:
server.port=8081
spring.datasource.url=jdbc:postgresql://localhost:5432/belajar
spring.datasource.username=belajar
spring.jpa.show-sql=trueserver:
port: 8081
spring:
datasource:
url: jdbc:postgresql://localhost:5432/belajar
username: belajar
jpa:
show-sql: truePilih YAML jika konfigurasi banyak dan berlapis — lebih mudah dibaca. Pilih properties jika konfigurasi singkat. Ingat: jangan punya kedua file sekaligus karena Spring hanya membaca satu.
Akses property dari kode dengan @Value atau dengan type-safe configuration @ConfigurationProperties:
@ConfigurationProperties(prefix = "app.storage")
public class StorageProperties {
private String bucket;
private String region;
// getter dan setter
}Dengan @ConfigurationProperties, sekelompok property dibundel menjadi object yang ter-tipe dan mudah diuji. Aktifkan dengan @EnableConfigurationProperties atau @ConfigurationPropertiesScan di kelas utama.
Spring Boot memuat konfigurasi dari banyak sumber dengan urutan prioritas tertentu. Environment variables berada di atas file application.properties, sehingga bisa meng-override tanpa mengubah file. Konversi property server.port ke environment variable menjadi SERVER_PORT:
export SERVER_PORT=9000
export SPRING_DATASOURCE_URL=jdbc:postgresql://db.internal:5432/prod
./mvnw spring-boot:runMekanisme relaxed binding ini membuat deployment ke berbagai lingkungan menjadi fleksibel — cukup atur environment variable, tanpa mengubah artefak aplikasi.
Kalian juga bisa meng-override lewat argument command line saat menjalankan jar:
java -jar target/belajar-spring-boot.jar \
--server.port=9000 --spring.profiles.active=prodArgument command line memiliki prioritas tertinggi. Ini berguna saat menjalankan aplikasi secara manual atau dalam script deployment. Contoh: java -jar target/belajar-spring-boot.jar --server.port=9000 --spring.profiles.active=prod menggabungkan override port dan aktivasi profil dalam satu perintah.
Konfigurasi per lingkungan dipecah menjadi file dengan akhiran profil: application-dev.yml, application-test.yml, application-prod.yml. File application.yml utama berisi konfigurasi bersama, sedangkan file profil berisi perbedaan:
spring:
datasource:
url: jdbc:postgresql://${DB_HOST}:5432/${DB_NAME}
username: ${DB_USER}
password: ${DB_PASSWORD}Konfigurasi produksi membaca nilai dari environment variable. Ini menjaga agar credential tidak pernah tertulis di file konfigurasi.
Aktifkan profil dengan property spring.profiles.active, environment variable SPRING_PROFILES_ACTIVE, atau argument command line:
export SPRING_PROFILES_ACTIVE=prod
java -jar target/belajar-spring-boot.jarAplikasi kini memuat application.yml lalu menimpa dengan application-prod.yml. Profile juga bisa menandai bean tertentu aktif hanya pada profil tertentu dengan @Profile.
Password database, API key, dan token tidak boleh ditulis di application.properties maupun dikomit ke git. Prinsip dasarnya: secret masuk lewat environment variable atau secret manager, bukan file konfigurasi.
export DB_PASSWORD='sangat-rahasia'
export API_KEY='sk-xxxx'Spring Boot memakai environment variable untuk mengisi property seperti DB_PASSWORD di atas. Di production, secret dikelola platform seperti Kubernetes Secret, AWS Secrets Manager, atau HashiCorp Vault — bukan di hardcode.
Untuk kasus tertentu, nilai property bisa dienkripsi. Pendekatan yang umum adalah memakai Jasypt untuk mendekripsi property saat runtime:
mvn jasypt:encrypt-value -Djasypt.encryptor.password=master \
-Djasypt.plugin.value="sangat-rahasia"Nilai terenkripsi diletakkan di konfigurasi dalam bentuk ENC(...), dan Jasypt mendekripsinya saat aplikasi start dengan master password yang diberikan lewat environment variable. Pastikan master password tidak ikut terkomit.
Episode 8 membekali kalian dengan pengelolaan konfigurasi yang benar: memilih format properties atau YAML, memanfaatkan environment variables dan command line arguments untuk externalized configuration, memisahkan konfigurasi per profil, serta menjaga secret tetap aman.
Inti yang harus dibawa pulang:
@ConfigurationProperties membuat konfigurasi type-safe dan mudah diuji.application-<profil>.yml.Di episode 9 selanjutnya kita akan membahas logging, metrics, dan health — Logback untuk logging terstruktur, Spring Boot Actuator untuk health check dan metrics, custom actuator endpoints, serta integrasi Micrometer dengan Prometheus untuk observability.