wake-up-neo.net

Spring Boot: Laden Sie @Value aus der YAML-Datei

Ich muss eine Eigenschaft aus einer .yml-Datei laden, die den Pfad zu einem Ordner enthält, aus dem die Anwendung Dateien lesen kann.

Ich verwende den folgenden Code, um die Eigenschaft einzufügen:

@Value("${files.upload.baseDir}")
private String pathToFileFolder;

Die .yml-Datei für die Entwicklung befindet sich unter src/main/resources/config/application.yml und führt die Anwendung mit dem folgenden Befehl in der Produktion aus, um die Entwicklungseinstellungen zu überschreiben:

Java -jar app.jar --spring.config.location=/path/to/application-production.yml

Die Spring Boot-Dokumentation sagt:

SpringApplication lädt Eigenschaften aus den Dateien application.properties an den folgenden Speicherorten und fügt sie der Spring-Umgebung hinzu:

  1. Ein/config-Unterverzeichnis des aktuellen Verzeichnisses.

  2. Das aktuelle Verzeichnis

  3. Ein Klassenpfad/Konfigurationspaket

  4. Die Klassenpfadwurzel

Ebenso gut wie:

Sie können auch YAML-Dateien ('.yml') als Alternative zu '.properties' verwenden.

Die .yml-Datei enthält:

{...}
files:
      upload:
        baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}

Und meine Application-Klasse ist kommentiert mit:

@SpringBootApplication
@EnableCaching

Wenn ich die Anwendung starte, erhalte ich eine Ausnahme:

Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"

Muss ich die YamlPropertySourceLoader-Klasse verwenden oder eine spezielle Anmerkung hinzufügen, um die Unterstützung für .yml in Spring Boot zu aktivieren?

Bearbeiten: Die Datei .yml enthält einige andere Eigenschaften, die von Spring Boot erfolgreich geladen werden, wie dataSource.XXXoder hibernate.XXX.

20
Thomas Schmidt

M. Deinum hat recht, das von mir bereitgestellte Setup funktioniert - die yml-Datei wurde falsch eingerückt, sodass die Eigenschaft nicht gefunden werden konnte.

4
Thomas Schmidt

Für mich verursachte ein doppelter Schlüssel in der Eigenschaftendatei dies ...

Ich habe denselben Schlüssel unwissentlich in großen Yml-Dateien verwendet.

key:   
 key1: value
 key2: value

key:  
 key3: value
1
SatyaRajC