Spring Boot YAML vs Properties: Yapılandırma Karşılaştırması ve Mülakat Soruları 2026
Spring Boot 4.1'de application.yml ve application.properties karşılaştırması: sözdizimi, çoklu profil dosyaları, öncelik kuralları, Jasypt ile şifrelenmiş gizli bilgiler ve mülakatlarda sorulan yapılandırma soruları.

Spring Boot iki yapılandırma formatını destekler: YAML (application.yml) ve Properties (application.properties). Her ikisi de aynı amaca hizmet eder, ancak sözdizimi, okunabilirlik ve belirli kullanım senaryolarında farklılık gösterir. Bu karşılaştırma, pratik farklılıkları analiz eder ve Spring Boot harici yapılandırma konusunda mülakatlarda karşılaşılan soruları ele alır.
Derin iç içe yapılandırma veya birden fazla profil içeren projeler için YAML tercih edilmelidir. Basit düz yapılandırmalar veya YAML sözdizimine aşina olmayan ekiplerle çalışırken Properties kullanılmalıdır.
Spring Boot Properties ve YAML: Bir Bakışta Farklar
Güncel sürüm hattı olan Spring Boot 4.1'de her iki format da aynı Environment nesnesini besler ve aynı şekilde bağlanır. Farklar sözdiziminde, birkaç yükleme kuralında ve iki dosya birlikte bulunduğunda ne olduğunda ortaya çıkar.
| Özellik | YAML | Properties |
|---|---|---|
| İç içe yapılandırma | Doğal hiyerarşi | Nokta gösterimi |
| Tek dosyada çoklu profil | --- ayırıcısı | #--- veya !--- ayırıcısı |
| Liste sözdizimi | Doğal YAML dizileri | İndeks gösterimi [0], [1] |
| Yorumlar | Herhangi bir satırda # | Herhangi bir satırda # veya ! |
@PropertySource ile yüklenebilir | Hayır | Evet |
| İki dosya aynı konumda | Geçersiz kılınır | Öncelik kazanır |
| Öğrenme eğrisi | Girintiye duyarlı | Minimal |
Adayların genellikle gözden kaçırdığı satırlar, @PropertySource ve aynı konumdaki iki dosyayla ilgili olanlardır. Spring Boot harici yapılandırma referansı, YAML dosyalarının @PropertySource veya @TestPropertySource ile yüklenemeyeceğini ve application.properties ile application.yml yan yana bulunduğunda .properties değerinin kazandığını belirtir. Resmi öneri, tüm uygulama için tek bir format seçmektir.
YAML ve Properties Arasındaki Sözdizimi Karşılaştırması
En belirgin fark, her formatın hiyerarşik veriyi nasıl temsil ettiğidir. Properties dosyaları her satırda nokta gösterimi kullanırken, YAML iç içe geçmeyi ifade etmek için girintileme kullanır.
# application.properties
server.port=8080
server.servlet.context-path=/api
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=admin
spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=falseEşdeğer YAML yapılandırması ilgili ayarları görsel olarak gruplar:
# application.yml
server:
port: 8080
servlet:
context-path: /api
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: admin
password: ${DB_PASSWORD}
jpa:
hibernate:
ddl-auto: validate
show-sql: falseYAML, birden fazla özellik aynı öneki paylaştığında tekrarı azaltır. Properties dosyasında spring.datasource üç kez görünürken, YAML bunu bir kez tanımlar.
Spring Boot Yapılandırmasında Profil Yönetimi
Spring Boot profilleri, geliştirme, staging ve üretim ortamları için farklı yapılandırmalar sağlar. Her iki format da profile özgü dosyaları ve çoklu belge dosyalarını destekler.
Klasik yaklaşım her profil için bir dosya kullanır:
# application-dev.properties
server.port=8080
spring.datasource.url=jdbc:h2:mem:devdb
logging.level.root=DEBUG
# application-prod.properties
server.port=80
spring.datasource.url=jdbc:postgresql://prod-server:5432/proddb
logging.level.root=WARNYAML, --- ayırıcısını kullanarak tek bir dosya içinde çoklu belge sözdizimini destekler:
# application.yml
spring:
profiles:
active: dev
---
spring:
config:
activate:
on-profile: dev
server:
port: 8080
logging:
level:
root: DEBUG
---
spring:
config:
activate:
on-profile: prod
server:
port: 80
logging:
level:
root: WARNProperties dosyaları da aynı çoklu belge düzenini destekler. Yalnızca #--- (veya !---) içeren bir satır dosyayı belgelere böler:
# application.properties
spring.profiles.active=dev
#---
spring.config.activate.on-profile=dev
server.port=8080
logging.level.root=DEBUG
#---
spring.config.activate.on-profile=prod
server.port=80
logging.level.root=WARNAyırıcının önünde boşluk bulunmamalı ve ayırıcı tam olarak üç kısa çizgiden oluşmalıdır. Spring Boot 2.4'ten itibaren spring.config.activate.on-profile özelliği, her iki formatta da eski spring.profiles sözdiziminin yerini aldı.
"Properties dosyaları her profil için ayrı dosya gerektirir" sık verilen yanlış bir cevaptır. Çoklu belge .properties dosyaları Spring Boot 2.4'ten beri mevcuttur. Asıl sınırlama tam tersine YAML'dadır: @PropertySource ile yüklenemez.
Profil aktivasyonu, profil grupları ve @Profile bean'leri profiller ve ortam mülakat modülünde çalışılabilir.
Listeler ve Karmaşık Veri Yapıları
YAML, listeleri ve iç içe yapıları temsil etmede mükemmeldir. Bu durum güvenlik kuralları, CORS eşlemeleri veya özel bean yapılandırmaları için önem taşır.
# application.yml
app:
security:
allowed-origins:
- https://sharpskill.dev
- https://api.sharpskill.dev
cors:
allowed-methods:
- GET
- POST
- PUT
- DELETE
jwt:
secret: ${JWT_SECRET}
expiration-ms: 86400000Properties eşdeğeri indeks gösterimi gerektirir:
# application.properties
app.security.allowed-origins[0]=https://sharpskill.dev
app.security.allowed-origins[1]=https://api.sharpskill.dev
app.security.cors.allowed-methods[0]=GET
app.security.cors.allowed-methods[1]=POST
app.security.cors.allowed-methods[2]=PUT
app.security.cors.allowed-methods[3]=DELETE
app.security.jwt.secret=${JWT_SECRET}
app.security.jwt.expiration-ms=86400000YAML dosyasına yeni bir origin eklemek bir satır eklemek anlamına gelir. Properties'te her mevcut indeks doğru kalmalı ve yeni giriş sıradaki indeks numarasını gerektirir.
Spring Boot mülakatlarında başarılı olmaya hazır mısın?
İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.
@ConfigurationProperties ile Tür Güvenli Yapılandırma
Spring Boot, yapılandırma değerlerini @ConfigurationProperties aracılığıyla Java sınıflarına bağlar. Her iki format da bu anotasyon ile aynı şekilde çalışır.
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
@ConfigurationProperties(prefix = "app.security")
public record AppSecurityProperties(
List<String> allowedOrigins,
CorsConfig cors,
JwtConfig jwt
) {
public record CorsConfig(List<String> allowedMethods) {}
public record JwtConfig(String secret, long expirationMs) {}
}Spring Boot esnek bağlama, farklı adlandırma kuralları arasında otomatik olarak dönüştürme yapar. app.security.allowed-origins özelliği, kaynağın YAML veya properties olmasından bağımsız olarak allowedOrigins'e bağlanır.
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@Configuration
@EnableConfigurationProperties(AppSecurityProperties.class)
public class SecurityConfig {
private final AppSecurityProperties securityProperties;
public SecurityConfig(AppSecurityProperties securityProperties) {
this.securityProperties = securityProperties;
}
// CORS configuration using securityProperties.cors().allowedMethods()
}Spring Security yapılandırma kalıpları hakkında daha fazla bilgi için Spring Security temelleri modülüne bakılabilir.
Spring Boot Yapılandırması Hakkında Yaygın Mülakat Soruları
Yapılandırma, Spring Boot mülakatlarında sık karşılaşılan bir konudur. Mülakatçılar harici yapılandırma, ortama özgü ayarlar ve özellik bağlama anlayışını değerlendirir.
Soru: Yapılandırma kaynaklarının öncelik sırası nedir?
Spring Boot, yapılandırmayı belirli bir sırada birden fazla kaynaktan yükler. Daha yüksek öncelikli kaynaklar düşük öncelikli olanları geçersiz kılar (liste, JNDI, servlet parametreleri ve test anotasyonlarını da kapsayan resmi listenin sadeleştirilmiş hâlidir):
-
Komut satırı argümanları (
--server.port=9000) -
SPRING_APPLICATION_JSON(bir ortam değişkeni veya sistem özelliği içinde satır içi JSON) -
Java sistem özellikleri (
-Dserver.port=9000) -
İşletim sistemi ortam değişkenleri (
SERVER_PORT=9000) -
Config data dosyaları (
application.yml,application.propertiesve bunların profil varyantları) -
@PropertySourceanotasyonları -
SpringApplication.setDefaultPropertiesile varsayılan özellikler -
adımın içinde ikinci bir sıralama vardır: profile özgü dosyalar genel dosyaları, paketlenmiş jar dışındaki dosyalar da jar içindekileri geçersiz kılar. Aynı konumda
.propertiesdosyası.ymldosyasını geçersiz kılar.application.ymliçinde ayarlanan bir değerin neden sessizce yok sayıldığını (yanında unutulmuş birapplication.properties) açıklayabilen bir aday, gerçek hata ayıklama deneyimi olduğunu gösterir.
Soru: YAML yerine properties ne zaman tercih edilmelidir?
Properties dosyalarının belirli durumlarda avantajları vardır:
@PropertySourceile yükleme: YAML bu şekilde yüklenemez, bu nedenle anotasyonla içe aktarılan ek dosyaların.propertiesolması gerekir- Ekip aşinalığı: Properties sözdizimi Spring Boot'a yeni başlayan geliştiriciler için daha basittir
- Tek satırlık değerler: İç içe geçme olmayan düz yapılandırmalar YAML'dan bir şey kazanmaz
- Girinti hatası riski yok: YAML'da yanlış yere konmuş bir boşluk, bir anahtarı sessizce yanlış üst öğenin altına taşır
YAML şu durumlarda daha iyi çalışır:
- Yapılandırma derin iç içe geçme içeriyorsa (üç veya daha fazla seviye)
- Listeler sık değişiklik gerektiriyorsa
- Karmaşık yapılandırmalarda okunabilirlik önemliyse
Soru: Hassas yapılandırma değerleri nasıl yönetilir?
Gizli bilgiler asla versiyon kontrolüne commit edilmemelidir. Spring Boot birkaç yaklaşım sunar:
# application.yml - reference environment variable
spring:
datasource:
password: ${DB_PASSWORD}Üretim sistemleri için Spring Cloud Config Server veya HashiCorp Vault merkezi gizli bilgi yönetimi sağlar. Actuator izleme rehberi hassas uç noktaların güvenliğini ele alır.
Soru: Jasypt nedir ve Spring Boot özelliklerini nasıl şifreler?
Jasypt Spring Boot, Environment oluşturulurken ENC(...) ile sarılmış değerlerin şifresini çözer. Böylece şifrelenmiş gizli bilgiler application.yml veya application.properties içinde durabilir ve yine de düz değerler gibi bağlanır:
# application.properties
spring.datasource.password=ENC(nrmZtkF7T0kjG/VodDvBw93Ct8EgjCA+)# The master password is supplied at runtime, never committed
java -Djasypt.encryptor.password=$JASYPT_MASTER_KEY -jar app.jarZorunlu tek özellik jasypt.encryptor.password olup varsayılan algoritma PBEWITHHMACSHA512ANDAES_256 şeklindedir. Format fark yaratmaz: aynı ENC(...) değeri hem YAML'da hem properties'te çalışır.
Kıdemli bir adayı ayıran cevap: Jasypt gizli bilgiyi ortadan kaldırmaz, yalnızca yerini değiştirir. Ana parolaya sahip olan herkes depodaki her değerin şifresini çözebilir ve parolayı değiştirmek tüm değerlerin yeniden şifrelenmesi anlamına gelir. Vault veya bir bulut gizli bilgi yöneticisi erişim kontrolü, denetim ve rotasyon ekler; Jasypt bunları sunmaz.
4.0.x starter'ı (4.0.4, Ocak 2026) Java 17 ve Spring Boot 3.5+ gerektirir ve README dosyası Spring Boot 4'ü listelemez. Temel Jasypt kütüphanesi, Mayıs 2019'daki 1.9.3 sürümünden bu yana yeni sürüm yayımlamadı. Jasypt tabanlı bir proje Spring Boot 4'e taşınmadan önce starter ayrı bir dalda doğrulanmalıdır.
Başlangıçta @ConfigurationProperties Doğrulama
Spring Boot, @ConfigurationProperties sınıflarını Jakarta Bean Validation anotasyonları ile birleştirildiğinde başlangıçta doğrular.
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Positive;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@Validated
@ConfigurationProperties(prefix = "app.database")
public record DatabaseProperties(
@NotBlank String url,
@NotBlank String username,
@Positive int poolSize
) {}app.database.pool-size eksik veya negatifse, uygulama başlangıçta net bir hata mesajı ile hızlı bir şekilde başarısız olur. Bu doğrulama YAML ve properties kaynakları için aynı şekilde çalışır.
Ortama Özgü Yapılandırma Dosyaları
Spring Boot, varsayılan src/main/resources dışında ek yapılandırma dosyası konumlarını destekler. spring.config.import özelliği harici dosyaları yükler:
# application.yml
spring:
config:
import:
- optional:file:./config/
- optional:configserver:http://config-server:8888optional: öneki, dosya mevcut olmadığında başlangıç hatasını önler. Bu kalıp, üretim merkezi bir sunucudan yapılandırma çekerken varsayılan değerlerle yerel geliştirmeyi mümkün kılar. Bu dosyalarla ilgili daha fazla pratik soru application.properties ve YAML mülakat modülünde yer alır.
Kaynaklar
- Spring Boot referansı: Externalized Configuration: özellik kaynaklarının sırası,
#---ile çoklu belge properties dosyaları,.propertiesdosyasının YAML'a göre önceliği,@PropertySourceile YAML yüklenememesi - Spring Boot sürümleri: 4.1.2 güncel GA sürümüdür (Ekim 2026)
- Jasypt Spring Boot README:
ENC(...)sözdizimi, varsayılan algoritma, Spring Boot 3.5+ gereksinimi
Pratik yapmaya başla!
Mülakat simülatörleri ve teknik testlerle bilgini test et.
Spring Boot Yapılandırması için Temel Çıkarımlar
- YAML, paylaşılan öneklere sahip yapılandırmalar için tekrarı azaltır ve listeleri daha temiz bir şekilde yönetir
- Properties dosyaları düz yapılandırmalar ve YAML sözdizimine daha az aşina ekipler için iyi çalışır
- Spring Boot 4.1,
@ConfigurationPropertiesbağlama ve doğrulama için her iki formatı eşit şekilde ele alır - Her iki format da tek dosyada birden fazla profili destekler: YAML'da
---, properties'te#--- - İki dosya aynı konumda bulunduğunda
.propertieskazanır ve yalnızca properties dosyaları@PropertySourceile yüklenebilir - Yapılandırma önceliği belirli bir sıra izler: komut satırı argümanları ortam değişkenlerini, onlar da dosya tabanlı yapılandırmayı geçersiz kılar
- Hassas değerler ortam değişkenlerinde veya gizli bilgi yönetim sistemlerinde bulunmalıdır; Jasypt
ENC(...)değerleri gizli bilgiyi yalnızca ana parolaya taşır - Üretim ortamlarında harici kaynaklardan yapılandırma yüklemek için
spring.config.importkullanılmalıdır
Spring Boot kodundaki hatayı bulabilir misin?
Gerçek bir kod parçası, gizli bir hata, günde bir deneme. Denemek için hesap gerekmez.

Yazan:
Anthony Fillion-MailletSharpSkill kurucusu
10 yılı aşkın süredir fullstack geliştirici. SharpSkill’i yönetiyor ve burada yayımlanan her şeyden sorumlu.
27 Ekim 2026 tarihinde güncellendi
Etiketler
Paylaş
İlgili makaleler

2026'da freelance Java Spring Boot geliştirici işleri: sözleşmeleri nerede bulunur, günlük ücretler, nasıl hazırlanılır
2026'da Spring Boot freelance sözleşmelerini nerede bulacağınız, Avrupa genelindeki günlük ücretler ve teknik mülakatlara nasıl hazırlanacağınız.

2026'da Spring Boot Gözlemlenebilirlik: OpenTelemetry, Dağıtık İzleme ve Mülakat Soruları
OpenTelemetry ve Micrometer Tracing ile Spring Boot gözlemlenebilirliği hakkında kapsamlı rehber. Dağıtık izleme kurulumu, Observation API, OTLP export yapılandırması ve teknik mülakat hazırlığı.

2026'da Java Spring Boot Geliştirici İş İlanları: Nerede Aramak, Maaş Aralıkları, Nasıl Hazırlanmak
2026 yılında Java Spring Boot geliştirici iş ilanları: güncel maaş aralıkları, iş arama platformları ve mülakat hazırlığı stratejileri.