Einführung in die @Value-Annotation von Spring Boot

Einleitung

Wenn du mit Spring Boot anfängst oder bereits ein wenig Erfahrung hast, wirst du schnell feststellen: Konfiguration ist ein zentraler Bestandteil jeder Anwendung. Und wie soll eine App wissen, welche Datenbank sie verwenden soll, auf welchem Port sie laufen soll oder ob Debug-Modus aktiviert ist?

In Spring Boot gibt es mehrere Wege, solche Konfigurationswerte zu verwalten – und einer der einfachsten und häufigsten ist die @Value-Annotation.

In diesem Tutorial lernst du, wie du mit @Value Werte aus externen Dateien (wie application.properties oder application.yml) in deine Java-Klassen einfügst. Du wirst verstehen, warum das so praktisch ist und wie du es korrekt anwendest.

🎯 Was lernst du am Ende?

Nach diesem Tutorial weißt du:

  • Wie du @Value zur Konfiguration deiner Anwendung einsetzt.
  • Wie man Default-Werte festlegt.
  • Welche Arten von Werten (String, int, List) mit @Value verwendet werden können.
  • Und wie du sicherstellst, dass deine Anwendung korrekt konfiguriert ist – ohne manuelle Änderungen im Code.

🔧 Voraussetzungen

Bevor du mit dem Tutorial beginnst, solltest du Folgendes haben:

  1. Ein funktionierendes Spring Boot-Projekt (z. B. über Spring Initializr).
  2. Java 8 oder höher installiert.
  3. Ein Texteditor oder IDE, z. B. IntelliJ IDEA, Eclipse oder VS Code.
  4. Grundlagen zu Spring-Komponenten (@Component, @Service, etc.) – keine Panik, wir erklären das im Tutorial!

Schritt-für-Schritt-Anleitung

Schritt 1: Konfiguration in application.properties einrichten

Zuerst legen wir eine einfache Konfigurationsdatei an. Diese liegt standardmäßig unter src/main/resources/application.properties.

app.name=MeineAnwendung
server.port=9090
app.debug=false
app.tags=tag1,tag2,tag3

Hier definieren wir einige Werte, die später in unserem Code verwendet werden.

Schritt 2: Eine Komponente mit @Value erstellen

Nun erstellen wir eine einfache Spring-Komponente, in der wir diese Werte per @Value einbinden:

@Component
public class MyService {

    @Value("${app.name}")
    private String appName;

    @Value("${server.port:8080}")
    private int port;

    @Value("${app.debug:false}")
    private boolean debug;

    @Value("${app.tags:tag1,tag2}")
    private List<String> tags;
}

Warum funktioniert das so?

  • @Value("${app.name}") holt den Wert aus der Konfiguration.
  • @Value("${server.port:8080}") setzt einen Default-Wert, falls die Eigenschaft nicht gefunden wird.
  • List<String> wird automatisch aus einem Komma-getrennten String konvertiert.

Schritt 3: Den Service nutzen

Jetzt können wir den Service in einer Controller-Klasse oder anderswo verwenden:

@RestController
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("/info")
    public String getInfo() {
        return "Name: " + myService.appName + ", Port: " + myService.port;
    }
}

Wenn du deine Anwendung startest und http://localhost:9090/info aufrufst, siehst du die konfigurierten Werte.


Häufige Fehler und wie man sie behebt

🧨 Fehler 1: @Value funktioniert nicht

Problem: Du hast den Wert in der Konfigurationsdatei gesetzt, aber er wird immer noch nicht verwendet.

Lösung:

  • Stelle sicher, dass die Klasse mit @Component annotiert ist.
  • Verwende nicht @Value in statischen Feldern – das funktioniert nicht immer.
  • Prüfe den Dateinamen: application.properties muss sich im Ordner src/main/resources befinden.

🧨 Fehler 2: Default-Wert wird ignoriert

Problem: Du hast einen Default-Wert wie ${app.debug:false} gesetzt, aber der Wert wird nicht verwendet.

Lösung:

  • Achte darauf, dass du den Doppelpunkt (:) korrekt setzt.
  • Prüfe, ob du die richtige Syntax verwendest: ${property.name:default}.

🧨 Fehler 3: Typkonvertierung fehlschlägt

Problem: Du versuchst, einen String in eine Liste zu konvertieren, aber es wird ein Fehler geworfen.

Lösung:

  • Verwende List<String> für kommagetrennte Werte.
  • Achte darauf, dass die Werte im Konfigurationsfile richtig formatiert sind (z. B. app.tags=tag1,tag2).

🧾 Zusammenfassung und nächste Schritte

In diesem Tutorial hast du gelernt:

  • Wie man Konfigurationen in Spring Boot mit @Value verbindet.
  • Wie man Default-Werte verwendet.
  • Wie man verschiedene Datentypen wie String, int, boolean und List<String> einliest.
  • Warum @Value nützlich ist – vor allem für einfache, dynamische Werte.

📚 Nächste Schritte

Wenn du dich tiefer mit Spring Boot beschäftigen möchtest, empfehlen wir dir:

  • @ConfigurationProperties: Für komplexere Konfigurationen.
  • Environment und PropertySources: Wie Spring die verschiedenen Konfigurationsquellen verarbeitet.
  • Profile und Umgebungen: Wie du verschiedene Einstellungen je nach Umgebung (Dev, Test, Prod) verwendest.