Jede Anwendung braucht Konfiguration. Ports, Datenbankverbindungen, Feature-Flags, Timeouts. Spring Boot bietet zwei Formate dafür: Properties und YAML. Beide erreichen dasselbe – die Wahl ist Geschmackssache.
Properties-Format – das klassische Java-Format:
# application.properties
server.port=8080
spring.application.name=arcade-highscore-api
spring.data.mongodb.uri=mongodb://localhost:27017/arcade
YAML-Format – strukturierter und lesbarer:
# application.yaml
server:
port: 8080
spring:
application:
name: arcade-highscore-api
data:
mongodb:
uri: mongodb://localhost:27017/arcadeDer Inhalt ist identisch. YAML nutzt Einrückung statt Punkte für Hierarchien. Bei tief verschachtelten Konfigurationen wird der Unterschied deutlich:
# Properties: Wiederholung
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
# YAML: Gruppierung
spring:
datasource:
hikari:
maximum-pool-size: 10
minimum-idle: 5
idle-timeout: 300000Das Arcade-Projekt verwendet YAML. Für neue Projekte ist das die übliche Wahl.
Spring Boot sucht Konfigurationsdateien an bestimmten Orten:
Höhere Priorität überschreibt niedrigere. Eine
application.yaml im aktuellen Verzeichnis überschreibt die
im JAR.
Für das Arcade-Projekt liegt die Datei im Standard-Ort:
src/main/resources/
└── application.yaml
Beim Build wird sie ins JAR gepackt. Zur Laufzeit kann sie von außen überschrieben werden.
Spring Boot kennt hunderte Properties. Die wichtigsten Kategorien:
| Präfix | Bereich | Beispiele |
|---|---|---|
server.* |
HTTP-Server | Port, Context-Path, SSL |
spring.datasource.* |
Datenbanken | URL, Credentials, Pool |
spring.data.* |
Data-Module | MongoDB, Redis, JPA |
spring.mvc.* |
Web MVC | View-Resolver, Formatierung |
logging.* |
Logging | Level, Patterns, Dateien |
management.* |
Actuator | Endpoints, Metriken |
Die vollständige Liste steht in der Spring Boot Dokumentation unter “Common Application Properties”.
Eine typische application.yaml für das
Arcade-Projekt:
# Anwendungsname - erscheint in Logs und Monitoring
spring:
application:
name: arcade-highscore-api
# Server-Konfiguration
server:
port: 8080
# Logging - mehr Details für eigenen Code
logging:
level:
de.digitalfrontiers.arcade: DEBUG
org.springframework.web: INFO
# Später: Datenbank
# spring:
# data:
# mongodb:
# uri: mongodb://localhost:27017/arcadeKommentare mit # dokumentieren die Absicht.
Auskommentierte Blöcke zeigen zukünftige Erweiterungen.
YAML hat Eigenheiten, die Einsteiger stolpern lassen:
Einrückung zählt – immer Leerzeichen, nie Tabs:
# RICHTIG
server:
port: 8080 # 2 Leerzeichen Einrückung
# FALSCH - Tab statt Leerzeichen
server:
port: 8080 # Parser-Fehler!Strings meist ohne Anführungszeichen:
spring:
application:
name: arcade-api # Funktioniert
name: "arcade-api" # Auch ok
name: 'arcade-api' # Auch okAnführungszeichen bei Sonderzeichen:
# FALSCH - Doppelpunkt verwirrt Parser
message: Achtung: Fehler
# RICHTIG
message: "Achtung: Fehler"Listen mit Bindestrich:
# Liste von Werten
my-app:
allowed-origins:
- http://localhost:3000
- http://localhost:5173
- https://arcade.example.comProperties können durch Umgebungsvariablen überschrieben werden. Spring Boot wandelt automatisch um:
Property: server.port
Umgebungsvariable: SERVER_PORT
Die Regeln: - Punkte werden zu Unterstrichen - Alles wird Großbuchstaben - Bindestriche werden zu Unterstrichen
# Port per Umgebungsvariable setzen
export SERVER_PORT=9090
./gradlew bootRun
# -> Startet auf Port 9090Das ist wichtig für Container und Cloud-Deployments, wo Konfiguration über Umgebungsvariablen erfolgt.
Wenn dieselbe Property aus mehreren Quellen kommt, gewinnt die höhere Priorität:
Kommandozeilenargumente schlagen alles:
# Überschreibt ALLES andere
./gradlew bootRun --args='--server.port=9999'Das ermöglicht flexible Deployments: Defaults im JAR, Anpassungen per Umgebung.