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
@Valuezur Konfiguration deiner Anwendung einsetzt. - Wie man Default-Werte festlegt.
- Welche Arten von Werten (
String,int,List) mit@Valueverwendet 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:
- Ein funktionierendes Spring Boot-Projekt (z. B. über Spring Initializr).
- Java 8 oder höher installiert.
- Ein Texteditor oder IDE, z. B. IntelliJ IDEA, Eclipse oder VS Code.
- 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
@Componentannotiert ist. - Verwende nicht
@Valuein statischen Feldern – das funktioniert nicht immer. - Prüfe den Dateinamen:
application.propertiesmuss sich im Ordnersrc/main/resourcesbefinden.
🧨 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
@Valueverbindet. - Wie man Default-Werte verwendet.
- Wie man verschiedene Datentypen wie
String,int,booleanundList<String>einliest. - Warum
@Valuenü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.