héritant de la propriété user.home dans mon fichier .properties personnalisés
-
09-10-2019 - |
Question
Puis-je faire quelque chose comme working-dir="file:${user.home}/some-directory"
dans mon fichier .properties? J'utilise ResourceBundle à la configuration de charge à partir d'un fichier .properties et je hériter d'une clé de propriété système tel que user.home
pour ma propriété working-dir
. Il serait agréable de pouvoir faire ce que je peux avoir différentes versions des .properties dans le répertoire des ressources du paquet source et package de test respectivement. Je veux définir des valeurs différentes pour working-dir
pour ma production et de l'environnement de test.
La solution
Vous ne pouvez pas faire directement, mais vous pouvez analyser vos propriétés dans votre code et les variables programatically développer, par exemple.
- Recherchez le modèle
${varname}
dans votre propriété - Obtenir la valeur de
varname
des propriétés du système - Remplacez
${varname}
avec la valeur de la propriété du systèmevarname
Voici une implémentation simple de ce qui précède:
String property = "file:${user.home}/some-directory";
StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("\\$\\{(.+)\\}");
Matcher matcher = pattern.matcher(property);
while (matcher.find())
{
String key = matcher.group(1);
String val = System.getProperty(key);
if (val != null)
{
matcher.appendReplacement(sb, Matcher.quoteReplacement(val));
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());
Autres conseils
Juste essayé configuration Apache commons 's l'interpolation de variables et il fonctionne parfaitement.