Spring Boot Configuration Properties
İlk yayın4 Şubat 2026
Son güncelleme17 Şubat 2026
Okuma süresi3 dk okuma

Çok sayıda @Value ve dağınık ayarlarla uğraşıyorsan, @ConfigurationProperties Spring Boot’ta yapılandırmayı tip-güvenli, düzenli ve doğrulanabilir hale getirmenin en iyi yoludur.
Bu yazıda şunları öğreneceksin:
application-{profile}.yml ile ortama göre override mantığı@ConfigurationProperties?Bu bölümde Neden @ConfigurationProperties? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Bu bölümde Gereksinimler konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
application.yml içinde config tanımlaUygulamaya özel bir prefix belirle (ör. app):
app: security: enabled: true token-expiry-seconds: 3600 allowed-origins: - 'https://example.com' - 'http://localhost:3000'
@ConfigurationProperties sınıfını oluşturİki yaygın yöntem var:
@ConfigurationProperties sınıflarını tara:import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; @SpringBootApplication @ConfigurationPropertiesScan public class DemoApplication {}
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication @EnableConfigurationProperties(AppProperties.class) public class DemoApplication {}
Constraint ekleyip sınıfı @Validated ile işaretle.
Not: Bu doğrulamanın çalışması için classpath’te bir Bean Validation implementasyonu olmalı (örn. spring-boot-starter-validation).
application-{profile}.yml)Spring Boot önce application.yml’ı okur, sonra aktif profile’a göre override dosyalarını uygular.
Örnek:
application.yml (varsayılanlar)application-prod.yml (prod override)# application-prod.yml app: security: enabled: true allowed-origins: - 'https://mycompany.com'
Birden fazla profile aktifse “son yazan kazanır” mantığı geçerlidir (son aktif profile, önceki profillerin değerlerini override edebilir).
Bu bölümde İpuçları konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
@Value yerine @ConfigurationProperties kullan.security, mail, storage gibi alanlara göre ayrı root’lar tanımla.Artık tip-güvenli, açılışta doğrulanan ve profile göre override edilebilen bir Spring Boot yapılandırma katmanın var. Sonraki adımda ortam bazlı gizli değerleri dışsallaştırıp regresyonları erken yakalamak için yapılandırma testleri ekleyin.
import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "app") public class AppProperties { private Security security = new Security(); private List<String> allowedOrigins = List.of(); public Security getSecurity() { return security; } public void setSecurity(Security security) { this.security = security; } public List<String> getAllowedOrigins() { return allowedOrigins; } public void setAllowedOrigins(List<String> allowedOrigins) { this.allowedOrigins = allowedOrigins; } public static class Security { private boolean enabled = true; private int tokenExpirySeconds = 3600; public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public int getTokenExpirySeconds() { return tokenExpirySeconds; } public void setTokenExpirySeconds(int tokenExpirySeconds) { this.tokenExpirySeconds = tokenExpirySeconds; } } }
import org.springframework.boot.context.properties.ConfigurationProperties @ConfigurationProperties(prefix = "app") data class AppProperties( val security: Security = Security(), val allowedOrigins: List<String> = emptyList(), ) { data class Security( val enabled: Boolean = true, val tokenExpirySeconds: Int = 3600, ) }
import java.util.List; import jakarta.validation.Valid; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; @ConfigurationProperties(prefix = "app") @Validated public class AppProperties { @Valid private Security security = new Security(); @NotEmpty private List<String> allowedOrigins = List.of(); public Security getSecurity() { return security; } public void setSecurity(Security security) { this.security = security; } public List<String> getAllowedOrigins() { return allowedOrigins; } public void setAllowedOrigins(List<String> allowedOrigins) { this.allowedOrigins = allowedOrigins; } public static class Security { private boolean enabled = true; @Min(60) private int tokenExpirySeconds = 3600; public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public int getTokenExpirySeconds() { return tokenExpirySeconds; } public void setTokenExpirySeconds(int tokenExpirySeconds) { this.tokenExpirySeconds = tokenExpirySeconds; } } }
import jakarta.validation.Valid import jakarta.validation.constraints.Min import jakarta.validation.constraints.NotEmpty import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.validation.annotation.Validated @ConfigurationProperties(prefix = "app") @Validated data class AppProperties( @field:Valid val security: Security = Security(), @field:NotEmpty val allowedOrigins: List<String> = emptyList(), ) { data class Security( val enabled: Boolean = true, @field:Min(60) val tokenExpirySeconds: Int = 3600, ) }