9 Übung: Defaults anpassen

Konventionen sind praktisch – bis sie nicht mehr passen. Diese Übung zeigt, wie du gezielt vom Standard abweichst, ohne das Framework zu bekämpfen.

9.1 Ausgangslage

Das Arcade-Projekt läuft auf Port 8080. Die Startseite erscheint unter /. Der Server loggt auf INFO-Level. Alles Konventionen, alles Defaults.

Jetzt ändern wir einige davon.

9.2 Aufgabe 1: Port ändern

Ziel: Die Anwendung soll auf Port 9090 starten statt 8080.

Öffne src/main/resources/application.yaml und füge hinzu:

server:
  port: 9090

Starte die Anwendung neu:

./gradlew bootRun

Beobachte die Konsolenausgabe. Statt Tomcat started on port 8080 solltest du jetzt Tomcat started on port 9090 sehen.

Was passiert hier?

Spring Boot liest application.yaml beim Start. Die Property server.port überschreibt den Default. Die Auto-Konfiguration für den eingebetteten Tomcat respektiert diese Einstellung.

9.3 Aufgabe 2: Context Path setzen

Ziel: Alle URLs sollen unter /api erreichbar sein.

Die Landingpage liegt aktuell unter /. Sie soll unter /api erscheinen.

Erweitere application.yaml:

server:
  port: 9090
  servlet:
    context-path: /api

Nach dem Neustart ist die Landingpage unter http://localhost:9090/api erreichbar. Der alte Pfad http://localhost:9090/ liefert einen 404-Fehler.

Wann braucht man das?

Context Paths sind nützlich, wenn mehrere Anwendungen auf einem Server laufen. Oder wenn ein Reverse Proxy bestimmte Pfade erwartet. In Microservice-Architekturen oft anzutreffen.

9.4 Aufgabe 3: Log-Level anpassen

Ziel: Detailliertere Logs für das eigene Package.

Spring Boot loggt standardmäßig auf INFO-Level. Für Debugging brauchst du manchmal mehr Details.

Füge zur application.yaml hinzu:

logging:
  level:
    de.digitalfrontiers.arcade: DEBUG
    org.springframework.web: DEBUG

Die Struktur ist hierarchisch: de.digitalfrontiers.arcade setzt DEBUG für alle Klassen in diesem Package und darunter. org.springframework.web aktiviert Debug-Logging für Spring MVC – nützlich, um Request-Handling nachzuvollziehen.

Starte neu und beobachte die Konsole. Du siehst jetzt deutlich mehr Output, besonders beim Laden von Controllern und beim Verarbeiten von Requests.

Vorsicht: DEBUG-Logging in Produktion erzeugt Unmengen an Daten. Setze es gezielt ein und nur temporär.

9.5 Aufgabe 4: Eigenes Banner

Ziel: Das Spring-Boot-Banner anpassen.

Beim Start zeigt Spring Boot ein ASCII-Art-Banner. Das lässt sich ersetzen.

Erstelle eine Datei src/main/resources/banner.txt:

    _                        _      
   / \   _ __ ___ __ _  __| | ___ 
  / _ \ | '__/ __/ _` |/ _` |/ _ \
 / ___ \| | | (_| (_| | (_| |  __/
/_/   \_\_|  \___\__,_|\__,_|\___|
                                  
 :: Highscore API ::  v1.0

Beim nächsten Start erscheint dein eigenes Banner statt des Spring-Logos.

Das Banner lässt sich auch komplett deaktivieren:

spring:
  main:
    banner-mode: off

Wozu das Ganze?

In Produktionsumgebungen stört das Banner nur. Für Entwicklung und Demos macht ein eigenes Banner die Anwendung erkennbar. Reine Kosmetik – aber manchmal wichtig.

9.6 Aufgabe 5: Zusammenführen

Hier die vollständige application.yaml nach allen Änderungen:

spring:
  application:
    name: arcade-highscore-api

server:
  port: 9090
  servlet:
    context-path: /api

logging:
  level:
    de.digitalfrontiers.arcade: DEBUG

Setze jetzt alles zurück auf die Defaults:

spring:
  application:
    name: arcade-highscore-api

server:
  port: 8080

Die Anwendung läuft wieder auf Port 8080, ohne Context Path, mit Standard-Logging. Fünf Zeilen – das ist Spring Boot.

9.7 Was wir gelernt haben

Default Property Beispielwert
Port 8080 server.port 9090
Context Path / server.servlet.context-path /api
Log-Level INFO logging.level.<package> DEBUG
Spring Banner spring.main.banner-mode off

Jede dieser Properties ist dokumentiert. Die vollständige Liste findest du in der Spring Boot Dokumentation unter “Common Application Properties” – über 400 Einstellungen, alle mit Defaults, alle überschreibbar.

Das ist die Essenz von Convention over Configuration: Du konfigurierst nur, was du ändern willst. Alles andere funktioniert einfach.