Configuration & Profiles
Konfiguration & Profile
Spring Boot macht Konfiguration extern, type-safe und umgebungsspezifisch.
Lektion 41: application.yml & @ConfigurationProperties
app:
name: "Demo API"
max-connections: 100
timeout: 30s
features:
- audit
- metrics
@ConfigurationProperties(prefix = "app")
public record AppProperties(
String name,
int maxConnections,
Duration timeout,
List<String> features
) {}
Type-safe, validated, documented. Kein @Value-String-Parsing.
Lektion 42: Profile
# application-dev.yml
app:
max-connections: 10
# application-prod.yml
app:
max-connections: 200
java -jar app.jar --spring.profiles.active=prod
Profile für Umgebungen
Profile ermöglichen unterschiedliche Konfiguration pro Umgebung:
dev (Debug, H2-DB), staging (Test-DB), prod (Produktions-DB).
Aktivierung per --spring.profiles.active=prod oder Umgebungsvariable
SPRING_PROFILES_ACTIVE=prod.
Lektion 43: Externe Konfiguration
Quellen (Priorität absteigend):
- Kommandozeilenargumente
- Umgebungsvariablen (
APP_NAME=...) application-{profile}.ymlapplication.yml- Standardwerte im Code
Lektion 44: Type-safe Configuration
@Bean
CommandLineRunner demo(AppProperties props) {
return args -> {
System.out.println("Name: " + props.name());
System.out.println("Timeout: " + props.timeout());
props.features().forEach(f -> System.out.println("Feature: " + f));
};
}
Lektion 45: Config-Validierung
@ConfigurationProperties(prefix = "app")
@Validated
public record AppProperties(
@NotBlank String name,
@Min(1) @Max(1000) int maxConnections,
@NotNull Duration timeout,
List<String> features
) {}
Spring prüft beim Start: fehlt app.name oder ist maxConnections > 1000,
startet die App gar nicht — Fail-fast.
Fail-fast durch @Validated auf Config-Records
Ohne Prüfung startet die App mit fehlenden Werten und fällt erst im
Betrieb auf. @Validated + Constraints wie @NotBlank prüfen die
Properties beim Start — fehlt app.jwtSecret, beendet Spring den Start
sofort mit klarer Fehlermeldung. Das ist der Unterschied zwischen einem
Build-Fehler und einem 3-Uhr-Timeout.
Praxis-Szenario: CropGuard: AppProperties
AppProperties bindet cropguard.jwtSecret und cropguard.jwtExpirationSeconds per @ConfigurationProperties. In application-dev.yml steht ein kurzes Secret und 8 h Laufzeit; in Produktion kommt das Secret aus einer Umgebungsvariable.
✅ Wichtige Erkenntnisse
Haken setzen, um deinen Lernfortschritt zu markieren: