27 Übung: Konfiguration anwenden

Zeit für Praxis. In dieser Übung machst du das Arcade-Projekt konfigurierbar und legst ein Entwicklungsprofil an.

27.1 Teil 1: Eigene Properties definieren

Erweitere die application.yaml um arcade-spezifische Konfiguration:

spring:
  application:
    name: arcade-highscore-api

server:
  port: 8080

# Eigene Konfiguration
arcade:
  title: "Retro Arcade"
  max-leaderboard-entries: 10
  featured-game: pacman

27.2 Teil 2: Properties im Controller nutzen

Passe den HomeController an, um die Werte zu nutzen:

@Controller
public class HomeController {
    
    private final GameService gameService;
    
    @Value("${arcade.title}")
    private String arcadeTitle;
    
    @Value("${arcade.featured-game}")
    private String featuredGame;

    public HomeController(GameService gameService) {
        this.gameService = gameService;
    }

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("games", gameService.getAllGames());
        model.addAttribute("title", arcadeTitle);
        model.addAttribute("featured", featuredGame);
        return "index";
    }
}

27.3 Teil 3: Template anpassen

Erweitere src/main/resources/templates/index.html, um den Titel anzuzeigen. Füge im Header-Bereich ein:

<h1 th:text="${title}">Arcade</h1>

Starte die Anwendung und prüfe, ob “Retro Arcade” angezeigt wird.

27.4 Teil 4: Entwicklungsprofil anlegen

Erstelle eine neue Datei src/main/resources/application-dev.yaml:

# Entwicklungsprofil
arcade:
  title: "Retro Arcade [DEV]"

logging:
  level:
    de.digitalfrontiers.arcade: DEBUG

# Zeige SQL-Queries (für später, wenn DB dazukommt)
spring:
  jpa:
    show-sql: true

27.5 Teil 5: Profil aktivieren

Starte mit aktiviertem Profil:

./gradlew bootRun --args='--spring.profiles.active=dev'

Beobachte: - Der Titel zeigt jetzt “[DEV]” - In den Logs erscheinen DEBUG-Meldungen

Ohne Profil:

./gradlew bootRun

Der Titel ist wieder “Retro Arcade” ohne Suffix.

27.6 Teil 6: Produktionsprofil (optional)

Erstelle application-prod.yaml:

# Produktionsprofil
arcade:
  title: "Retro Arcade"
  max-leaderboard-entries: 50

logging:
  level:
    root: WARN
    de.digitalfrontiers.arcade: INFO

server:
  tomcat:
    accesslog:
      enabled: true

27.7 Teil 7: Default-Profil setzen

Damit du nicht jedes Mal --spring.profiles.active=dev tippen musst, setze einen Default in application.yaml:

spring:
  application:
    name: arcade-highscore-api
  profiles:
    active: dev  # Default für lokale Entwicklung

server:
  port: 8080

arcade:
  title: "Retro Arcade"
  max-leaderboard-entries: 10
  featured-game: pacman

Jetzt startet die Anwendung immer mit dev-Profil, es sei denn, du überschreibst es explizit.

27.8 Ergebnis prüfen

Nach der Übung hast du:

Datei Zweck
application.yaml Basis-Konfiguration + Default-Profil
application-dev.yaml Entwicklungsumgebung
application-prod.yaml Produktionsumgebung

Die Anwendung verhält sich unterschiedlich je nach aktivem Profil:

Profil Titel Log-Level
(keins/dev) “Retro Arcade [DEV]” DEBUG
prod “Retro Arcade” INFO

27.9 Bonus: Umgebungsvariable testen

Überschreibe den Titel per Umgebungsvariable:

# Linux/Mac
export ARCADE_TITLE="Meine Arcade"
./gradlew bootRun

# Windows PowerShell
$env:ARCADE_TITLE="Meine Arcade"
./gradlew bootRun

Die Umgebungsvariable hat Vorrang vor der YAML-Datei. So funktioniert Konfiguration in Container-Umgebungen.

27.10 Zusammenfassung

Konzept Anwendung
@Value Properties in Controller injiziert
Profile dev und prod mit unterschiedlicher Konfiguration
Default-Profil spring.profiles.active: dev
Umgebungsvariablen ARCADE_TITLE überschreibt YAML

Das Arcade-Projekt ist jetzt flexibel konfigurierbar – ohne eine Zeile Java-Code zu ändern.