2010-09-17 12 views
7

Je veux définir une propriété pour un répertoire de travail (par exemple work.dir=/home/username/working-directory), pour mon fichier de production .properties, sans coder en dur le /home/username.Comment référencer une propriété système dans un fichier .properties défini par l'utilisateur?

Je veux référencer la propriété système user.home en place sur le /home/username codé en dur, pour rendre work.dir plus générique.

Comment puis-je référencer la propriété système et concaténer d'autres chaînes définies par l'utilisateur dans un fichier .properties défini par l'utilisateur?

Remarque: Je ne souhaite pas accéder à la propriété user.home dans mon code java, mais à partir des propriétés .properties que j'ai définies. Je veux pouvoir remplacer la valeur du work.dir par une valeur différente pour ma production et mon développement (tests JUnit par exemple).

Répondre

4

Récupère la propriété du fichier, puis remplace les macros prises en charge.

String propertyValue = System.getProperty("work.dir"); 
String userHome = System.getProperty("user.home"); 
String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome); 
0

Cette fonction n'est pas disponible dans java.util.Properties. Mais de nombreuses bibliothèques ajoutent la substitution de variables aux propriétés.

Voici un exemple de ce que vous essayez de faire en utilisant la bibliothèque OWNER API (voir le paragraphe « Propriétés importation »):

public interface SystemPropertiesExample extends Config { 
    @DefaultValue("Welcome: ${user.name}") 
    String welcomeString(); 

    @DefaultValue("${TMPDIR}/tempFile.tmp") 
    File tempFile(); 
} 

SystemPropertiesExample conf = 
     ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv()); 
String welcome = conf.welcomeString(); 
File temp = conf.tempFile(); 
2

Vous pouvez gérer vos propriétés avec Commons Configuration et utiliser Variable Interpolation

Si vous êtes familier avec Ant ou Maven, vous avez certainement déjà rencontré les variables (comme ${token}) qui sont automatiquement développées lorsque le fichier de configuration est chargé. Commons configuration prend en charge cette fonctionnalité et [...]

Cela permettrait à un fichier .properties avec

work.dir=${user.home}/working-directory