Belajar Spring Boot - Konfigurasi Aplikasi & Properties
Episode 8 of 24

Belajar Spring Boot - Konfigurasi Aplikasi & Properties

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.

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

Pendahuluan

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.

application.properties vs application.yml

Dua Format, Satu Semantik

Kedua format mendukung property yang sama. application.properties memakai format key=value datar, sedangkan application.yml memakai indentasi hierarki:

Format application.properties
server.port=8081
spring.datasource.url=jdbc:postgresql://localhost:5432/belajar
spring.datasource.username=belajar
spring.jpa.show-sql=true
Format application.yml
server:
  port: 8081
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/belajar
    username: belajar
  jpa:
    show-sql: true

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

Mengakses Property di Kode

Akses property dari kode dengan @Value atau dengan type-safe configuration @ConfigurationProperties:

Type-safe configuration
@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.

Externalized Configuration

Environment Variables

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:

Override konfigurasi dengan env var
export SERVER_PORT=9000
export SPRING_DATASOURCE_URL=jdbc:postgresql://db.internal:5432/prod
./mvnw spring-boot:run

Mekanisme relaxed binding ini membuat deployment ke berbagai lingkungan menjadi fleksibel — cukup atur environment variable, tanpa mengubah artefak aplikasi.

Command Line Arguments

Kalian juga bisa meng-override lewat argument command line saat menjalankan jar:

Override lewat command line
java -jar target/belajar-spring-boot.jar \
  --server.port=9000 --spring.profiles.active=prod

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

Profile-Specific Configuration

File Berbasis Profil

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:

application-prod.yml
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.

Mengaktifkan Profil

Aktifkan profil dengan property spring.profiles.active, environment variable SPRING_PROFILES_ACTIVE, atau argument command line:

Aktifkan profil prod
export SPRING_PROFILES_ACTIVE=prod
java -jar target/belajar-spring-boot.jar

Aplikasi kini memuat application.yml lalu menimpa dengan application-prod.yml. Profile juga bisa menandai bean tertentu aktif hanya pada profil tertentu dengan @Profile.

Pengamanan Secret dan Credentials

Jangan Menaruh Secret di Repository

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.

Set secret sebagai env var
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.

Menambahkan Lapisan Enkripsi

Untuk kasus tertentu, nilai property bisa dienkripsi. Pendekatan yang umum adalah memakai Jasypt untuk mendekripsi property saat runtime:

Enkripsi property dengan Jasypt
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.

Penutup

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:

  • Gunakan YAML untuk konfigurasi berlapis, properties untuk konfigurasi singkat.
  • Environment variables dan command line args meng-override file konfigurasi.
  • @ConfigurationProperties membuat konfigurasi type-safe dan mudah diuji.
  • Pecah konfigurasi per profil dengan file application-<profil>.yml.
  • Secret harus masuk lewat environment variable atau secret manager, bukan file konfigurasi.
  • Enkripsi property memakai Jasypt untuk lapisan keamanan tambahan.

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.

Belajar Spring Boot - Konfigurasi Aplikasi & Properties | Belajar Spring Boot