Spring Boot YAML vs Properties: Configuratievergelijking en Sollicitatievragen 2026
Vergelijking van application.yml en application.properties in Spring Boot 4.1: syntax, bestanden met meerdere profielen, voorrangsregels, met Jasypt versleutelde secrets en de configuratievragen uit sollicitatiegesprekken.

Spring Boot biedt twee primaire formaten voor applicatieconfiguratie: YAML en Properties. Beide formaten dienen hetzelfde doel, maar verschillen aanzienlijk in syntax, leesbaarheid en gebruikssituaties. De vergelijking hieronder zet de praktische verschillen op een rij, samen met de sollicitatievragen die over geëxternaliseerde configuratie in Spring Boot gesteld worden.
YAML past bij projecten met diep geneste configuratie of meerdere profielen. Properties past bij eenvoudige, platte configuraties of bij teams die weinig ervaring hebben met YAML-syntax.
Spring Boot Properties vs YAML in één oogopslag
In Spring Boot 4.1, de huidige releaselijn, voeden beide formaten hetzelfde Environment en worden ze identiek gebonden. De verschillen zitten in de syntax, in een paar laadregels en in wat er gebeurt als beide bestanden bestaan.
| Kenmerk | YAML | Properties |
|---|---|---|
| Geneste configuratie | Native hiërarchie | Puntnotatie |
| Meerdere profielen in één bestand | Scheidingsteken --- | Scheidingsteken #--- of !--- |
| Lijstsyntax | Native YAML-arrays | Indexnotatie [0], [1] |
| Commentaar | # op elke regel | # of ! op elke regel |
Laadbaar met @PropertySource | Nee | Ja |
| Beide bestanden op dezelfde locatie | Wordt overschreven | Krijgt voorrang |
| Leercurve | Gevoelig voor inspringing | Minimaal |
De laatste twee rijen missen kandidaten het vaakst. De Spring Boot-referentie over externe configuratie stelt dat YAML-bestanden niet via @PropertySource of @TestPropertySource geladen kunnen worden, en dat de waarde uit .properties wint wanneer application.properties en application.yml naast elkaar staan. De officiële aanbeveling is om voor de hele applicatie één formaat te kiezen.
Fundamentele Syntaxverschillen
Het fundamentele verschil ligt in de structurering van configuratiewaarden. Properties-bestanden gebruiken een platte sleutel-waarde structuur, terwijl YAML hiërarchische gegevens met inspringing weergeeft.
Properties Formaat
# 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=falseYAML Formaat
# 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: falseVoordelen van YAML Configuratie
YAML biedt verschillende voordelen voor complexe configuraties. De hiërarchische structuur vermindert redundantie en verbetert de leesbaarheid aanzienlijk.
# Meerdere profielen in één bestand
spring:
profiles:
active: development
---
spring:
config:
activate:
on-profile: development
datasource:
url: jdbc:h2:mem:devdb
driver-class-name: org.h2.Driver
logging:
level:
root: DEBUG
com.example: TRACE
---
spring:
config:
activate:
on-profile: production
datasource:
url: jdbc:postgresql://prod-server:5432/proddb
driver-class-name: org.postgresql.Driver
logging:
level:
root: WARN
com.example: INFODe documentscheiding met --- maakt het mogelijk om meerdere profielen in een enkel bestand te definiëren. Deze consolidatie vereenvoudigt het beheer van omgevingsspecifieke instellingen.
Properties-bestanden ondersteunen dezelfde opbouw met meerdere documenten. Een regel die alleen #--- (of !---) bevat, splitst het bestand in documenten:
# 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=WARNHet scheidingsteken mag geen voorafgaande spaties hebben en bestaat uit precies drie koppeltekens. Sinds Spring Boot 2.4 vervangt de property spring.config.activate.on-profile de oudere spring.profiles-syntax, in beide formaten.
"Properties-bestanden hebben één bestand per profiel nodig" is een veelgehoord fout antwoord. .properties-bestanden met meerdere documenten bestaan sinds Spring Boot 2.4. De echte beperking ligt bij YAML: het kan niet met @PropertySource geladen worden.
Profielactivering, profielgroepen en @Profile-beans komen aan bod in de interviewmodule over profielen en omgevingen.
Lijsten en Complexe Datastructuren
YAML behandelt lijsten en geneste structuren natuurlijker dan Properties-bestanden.
# Lijst van servers
application:
servers:
- host: server1.example.com
port: 8080
ssl: true
- host: server2.example.com
port: 8081
ssl: false
allowed-origins:
- https://example.com
- https://app.example.com
- https://admin.example.com
features:
authentication:
enabled: true
providers:
- oauth2
- ldap
caching:
enabled: true
ttl: 3600Het equivalente Properties-formaat vereist geïndexeerde notatie:
# Dezelfde configuratie in Properties
application.servers[0].host=server1.example.com
application.servers[0].port=8080
application.servers[0].ssl=true
application.servers[1].host=server2.example.com
application.servers[1].port=8081
application.servers[1].ssl=false
application.allowed-origins[0]=https://example.com
application.allowed-origins[1]=https://app.example.com
application.allowed-origins[2]=https://admin.example.com
application.features.authentication.enabled=true
application.features.authentication.providers[0]=oauth2
application.features.authentication.providers[1]=ldap
application.features.caching.enabled=true
application.features.caching.ttl=3600Configuration Properties Binding
Spring Boot maakt type-veilige configuratiebinding mogelijk met de @ConfigurationProperties annotatie:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties(prefix = "application")
public class ApplicationConfig {
private List<ServerConfig> servers;
private List<String> allowedOrigins;
private FeaturesConfig features;
// Getters and setters
public static class ServerConfig {
private String host;
private int port;
private boolean ssl;
// Getters and setters
}
public static class FeaturesConfig {
private AuthConfig authentication;
private CacheConfig caching;
// Getters and setters
}
public static class AuthConfig {
private boolean enabled;
private List<String> providers;
// Getters and setters
}
public static class CacheConfig {
private boolean enabled;
private int ttl;
// Getters and setters
}
}Omgevingsvariabelen en Externalisatie
Beide formaten ondersteunen overschrijving via omgevingsvariabelen. Spring Boot converteert automatisch tussen de formaten:
# Overschrijven van configuratiewaarden
export SPRING_DATASOURCE_URL=jdbc:postgresql://prod:5432/db
export SPRING_DATASOURCE_USERNAME=produser
export SERVER_PORT=9090
# Lijsten kunnen worden gescheiden door komma's
export APPLICATION_ALLOWED_ORIGINS=https://a.com,https://b.com# Verwijzen naar omgevingsvariabelen in YAML
spring:
datasource:
url: ${DB_URL:jdbc:h2:mem:default}
username: ${DB_USER:sa}
password: ${DB_PASSWORD:}
application:
api-key: ${API_KEY}
secret: ${APP_SECRET:default-secret}Validatie met Bean Validation
Configuratie-eigenschappen kunnen worden gevalideerd met Jakarta Bean Validation:
import jakarta.validation.constraints.*;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@Validated
@ConfigurationProperties(prefix = "application.security")
public class SecurityConfig {
@NotBlank(message = "JWT secret is required")
private String jwtSecret;
@Min(value = 300, message = "Token expiration must be at least 5 minutes")
@Max(value = 86400, message = "Token expiration cannot exceed 24 hours")
private int tokenExpiration = 3600;
@NotEmpty(message = "At least one allowed origin is required")
private List<@URL String> allowedOrigins;
@Email
private String adminEmail;
// Getters and setters
}Profielspecifieke Configuratie
Spring Boot ondersteunt profielspecifieke configuratiebestanden voor beide formaten:
src/main/resources/
├── application.yml # Gedeelde configuratie
├── application-dev.yml # Ontwikkelomgeving
├── application-staging.yml # Staging-omgeving
├── application-prod.yml # Productieomgeving
└── application-test.yml # Testomgeving# application-prod.yml
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
logging:
level:
root: WARN
file:
name: /var/log/app/application.log
management:
endpoints:
web:
exposure:
include: health,info,metricsMeer oefenvragen over deze bestanden staan in de interviewmodule over application.properties en YAML.
Klaar om je Spring Boot gesprekken te halen?
Oefen met onze interactieve simulatoren, flashcards en technische tests.
Veelgestelde Sollicitatievragen
Vraag 1: Wanneer heeft YAML de voorkeur boven Properties?
YAML is beter geschikt voor complexe, hiërarchische configuraties met geneste eigenschappen, lijsten en meerdere profielen. Properties-bestanden hebben de voorkeur voor eenvoudige configuraties, legacy-systemen of wanneer teamleden niet vertrouwd zijn met YAML-syntax. Een harde reden voor Properties: extra bestanden die via @PropertySource worden geïmporteerd, moeten .properties-bestanden zijn. Daarnaast verschuift een verkeerd geplaatste spatie in YAML een sleutel ongemerkt naar de verkeerde ouder.
Vraag 2: Hoe worden meerdere configuratiebestanden geladen?
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource({
"classpath:database.properties",
"classpath:messaging.properties"
})
public class AdditionalConfig {
}Volgens de referentiedocumentatie kunnen YAML-bestanden niet rechtstreeks met @PropertySource of @TestPropertySource geladen worden. Voor YAML is daarom een eigen PropertySourceFactory nodig:
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import java.util.Properties;
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public org.springframework.core.env.PropertySource<?> createPropertySource(
String name, EncodedResource resource) {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
Properties properties = factory.getObject();
String sourceName = name != null ? name : resource.getResource().getFilename();
return new PropertiesPropertySource(sourceName, properties);
}
}Vraag 3: Wat is de prioriteitsvolgorde van configuratiebronnen?
Spring Boot laadt configuraties in deze volgorde (hogere prioriteit overschrijft lagere):
- Opdrachtregelargumenten
- SPRING_APPLICATION_JSON (inline JSON)
- Servlet-parameters
- JNDI-attributen
- Java System Properties
- OS-omgevingsvariabelen
- Profielspecifieke bestanden (application-.yml)
- Applicatieconfiguratie (application.yml)
- @PropertySource annotaties
- Standaardwaarden
Binnen de configuratiebestanden geldt een tweede volgorde: profielspecifieke bestanden overschrijven generieke, en bestanden buiten de verpakte JAR overschrijven bestanden in de JAR. Op dezelfde locatie overschrijft .properties de .yml. Een kandidaat die kan uitleggen waarom een waarde in application.yml zonder melding genegeerd wordt (een achtergebleven application.properties ernaast), toont echte debugervaring.
Vraag 4: Hoe worden secrets veilig beheerd?
# Gebruik van Spring Cloud Config Server of Vault
spring:
cloud:
vault:
uri: https://vault.example.com
token: ${VAULT_TOKEN}
kv:
enabled: true
backend: secret
config:
import:
- vault://secret/application
- vault://secret/databaseVraag 5: Wat is Jasypt en hoe versleutelt het Spring Boot-properties?
Jasypt Spring Boot ontsleutelt waarden tussen ENC(...) op het moment dat het Environment wordt opgebouwd. Versleutelde secrets kunnen zo in application.yml of application.properties staan en worden gebonden als gewone waarden:
# 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.jarjasypt.encryptor.password is de enige verplichte property en het standaardalgoritme is PBEWITHHMACSHA512ANDAES_256. Het formaat maakt geen verschil: dezelfde ENC(...)-waarde werkt in YAML en in Properties.
Het antwoord dat een senior kandidaat onderscheidt: Jasypt verwijdert het secret niet, het verplaatst het. Wie het masterwachtwoord heeft, kan elke waarde in de repository ontsleutelen, en het roteren ervan betekent dat alle waarden opnieuw versleuteld moeten worden. Vault of een secret manager van een cloudprovider voegt toegangscontrole, auditing en rotatie toe, wat Jasypt niet doet.
De 4.0.x-starter (4.0.4, januari 2026) vereist Java 17 en Spring Boot 3.5+, en de README noemt Spring Boot 4 niet. De onderliggende Jasypt-bibliotheek heeft sinds 1.9.3 in mei 2019 geen release meer gehad. Wie een project met Jasypt naar Spring Boot 4 migreert, test de starter eerst op een aparte branch.
Vraag 6: Hoe werkt Relaxed Binding?
Spring Boot ondersteunt verschillende schrijfwijzen voor dezelfde eigenschap:
# Al deze vormen zijn equivalent
application:
apiKey: value # Camel Case
api-key: value # Kebab Case (aanbevolen)
api_key: value # Underscore
API_KEY: value # Hoofdletters (voor omgevingsvariabelen)Best Practices voor Productieomgevingen
# application-prod.yml met aanbevolen praktijken
spring:
datasource:
url: ${DATABASE_URL}
username: ${DATABASE_USERNAME}
password: ${DATABASE_PASSWORD}
hikari:
maximum-pool-size: ${DB_POOL_SIZE:10}
leak-detection-threshold: 60000
jpa:
open-in-view: false
properties:
hibernate:
jdbc:
batch_size: 50
order_inserts: true
order_updates: true
server:
shutdown: graceful
tomcat:
accept-count: 100
max-connections: 10000
threads:
max: 200
min-spare: 10
management:
server:
port: 8081
endpoints:
web:
exposure:
include: health,info,prometheus
endpoint:
health:
show-details: when_authorized
probes:
enabled: true
logging:
pattern:
console: "%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n"
level:
root: INFO
org.springframework.web: WARN
org.hibernate.SQL: WARNBronnen
- Spring Boot-referentie: Externalized Configuration: volgorde van property-bronnen, properties-bestanden met meerdere documenten via
#---, voorrang van.propertiesboven YAML, geen YAML in@PropertySource - Spring Boot-releases: 4.1.2 is de huidige GA-release (oktober 2026)
- README van Jasypt Spring Boot:
ENC(...)-syntax, standaardalgoritme, vereiste Spring Boot 3.5+
Begin met oefenen!
Test je kennis met onze gespreksimulatoren en technische tests.
Wat telt bij de keuze tussen YAML en Properties
De keuze tussen YAML en Properties hangt af van de specifieke projectvereisten. YAML biedt betere leesbaarheid en structuur voor complexe configuraties, terwijl Properties-bestanden eenvoud en brede toolondersteuning bieden. Moderne Spring Boot-applicaties neigen naar YAML vanwege de natuurlijke weergave van hiërarchische gegevens en de mogelijkheid om meerdere profielen in één bestand te definiëren. Properties-bestanden kunnen dat inmiddels ook, met het scheidingsteken #---. Staan beide bestanden op dezelfde locatie, dan wint .properties, en alleen properties-bestanden kunnen met @PropertySource geladen worden. Ongeacht het gekozen formaat moeten gevoelige gegevens altijd worden geleverd via omgevingsvariabelen of externe configuratiediensten zoals HashiCorp Vault of Spring Cloud Config Server. Met Jasypt versleutelde ENC(...)-waarden verplaatsen het secret alleen naar het masterwachtwoord.
Zie jij de bug in Spring Boot?
Een echt codefragment, een verborgen bug, één poging per dag. Zonder account uit te proberen.

Geschreven door
Anthony Fillion-MailletOprichter van SharpSkill
Al meer dan 10 jaar fullstack-ontwikkelaar. Hij leidt SharpSkill en staat in voor alles wat hier verschijnt.
Bijgewerkt op 27 oktober 2026
Tags
Delen
Gerelateerde artikelen

Spring Boot Sollicitatiegesprek: Transactiepropagatie
Beheers Spring Boot transactiepropagatie: REQUIRED, REQUIRES_NEW, NESTED en meer. 12 sollicitatievragen met code en veelgemaakte valkuilen.

30 Spring Boot Interviewvragen: Volledige Gids voor Java-ontwikkelaars
Bereid je voor op je Spring Boot-interviews met deze 30 essentiële vragen over auto-configuratie, starters, Spring Data JPA, Security 7 en testing.

Spring GraphQL Sollicitatiegesprek: Resolvers, DataLoaders en Oplossingen voor het N+1-probleem
Voorbereiding op Spring GraphQL sollicitatiegesprekken met deze complete gids. Resolvers, DataLoaders, omgaan met het N+1-probleem, mutaties en best practices voor technische vragen.