2010-09-17 15 views
7

Desidero definire una proprietà per una directory di lavoro (ad esempio work.dir=/home/username/working-directory), per il mio file .properties di produzione, senza codificare lo /home/username.Come fare riferimento a una proprietà di sistema all'interno di un file .properties definito dall'utente?

Desidero fare riferimento alla proprietà di sistema user.home in posizione sul codice codificato /home/username, per rendere work.dir più generico.

Come faccio a fare riferimento alla proprietà di sistema e concatenarlo con altre stringhe definite dall'utente in una proprietà definita dall'utente?

Nota: Non desidero accedere alla proprietà user.home nel mio codice java, ma da .properties che ho definito. Voglio essere in grado di sostituire il valore dello work.dir con un valore diverso sia per la mia produzione che per lo sviluppo (test di JUnit per esempio).

risposta

4

Ottenere la proprietà dal file, quindi sostituire i macro supportati.

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

Questa funzione non è disponibile in java.util.Properties. Ma molte librerie aggiungono sostituzione variabile alle proprietà.

Ecco un esempio di ciò che si sta cercando di fare con OWNER API biblioteca (vedi paragrafo "l'importazione di proprietà"):

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

È possibile gestire le tue proprietà con Commons Configuration e utilizzare Variable Interpolation

Se hai familiarità con Ant o Maven, hai sicuramente già incontrato le variabili (come ${token}) che vengono automaticamente espanse quando viene caricato il file di configurazione. Configurazione Commons supporta questa funzione, così [...]

Ciò consentirebbe un file .properties con

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