J'ai besoin de charger une propriété à partir d'un fichier .yml
, qui contient le chemin d'accès à un dossier où l'application peut lire les fichiers.
J'utilise le code suivant pour injecter la propriété:
@Value("${files.upload.baseDir}")
private String pathToFileFolder;
Le fichier .yml
pour le développement est situé sous src/main/resources/config/application.yml
, dans lequel vous exécutez l'application avec la commande suivante en production, afin de remplacer les paramètres de développement:
Java -jar app.jar --spring.config.location=/path/to/application-production.yml
La documentation de Spring Boot indique:
SpringApplication charge les propriétés à partir des fichiers application.properties aux emplacements suivants et les ajoute à l'environnement Spring:
Un sous-répertoire/config du répertoire en cours.
Le répertoire courant
Un paquet classpath/config
La racine du classpath
Aussi bien que:
Vous pouvez également utiliser les fichiers YAML ('.yml') comme alternative à '.properties'.
Le fichier .yml
contient:
{...}
files:
upload:
baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}
Et ma classe Application
est annotée avec:
@SpringBootApplication
@EnableCaching
Lorsque j'exécute l'application, j'obtiens une exception:
Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"
Dois-je utiliser la classe YamlPropertySourceLoader
ou ajouter une annotation spéciale pour activer la prise en charge de .yml
dans Spring Boot?
Edit: Le fichier .yml
contient d'autres propriétés qui sont chargées avec succès par Spring Boot, telles que dataSource.XXX
ou hibernate.XXX
.
M. Deinum a raison, la configuration que j'ai fournie fonctionne. Le fichier yml
a été mis en retrait de manière erronée.
Pour moi, une clé dupliquée dans le fichier de propriétés a causé ceci ...
J'ai utilisé la même clé sans le savoir dans un gros fichier yml.
key:
key1: value
key2: value
key:
key3: value