2010-02-15 12 views
20

Nel file application.properties se ho il percorso configurato come sotto Java, riconosco correttamente il percorso.Riguardo al file application.properties e alla variabile di ambiente

pathToInputFile=/kcs/data/incoming/ready/ 
pathToInputFileProcess=/kcs/data/incoming/work/ 

Se ho il modo di seguito utilizzando l'ambiente programma variabile di Java non riconosce il percorso

variabile ambientale TOM_DATA è impostata come/KCS

pathToInputFile=${TOM_DATA}/data/incoming/ready/ 
pathToInputFileProcess=${TOM_DATA}/data/incoming/work/ 

posso usare variabile d'ambiente all'interno dell'applicazione .properties file?

risposta

15

È possibile inserire variabili di ambiente nel file delle proprietà, ma Java non le riconoscerà automaticamente come variabili di ambiente e pertanto non le risolverà.

Per fare ciò è necessario analizzare i valori e risolvere qualsiasi variabile di ambiente rilevata da.

È possibile ottenere variabili di ambiente da Java utilizzando vari metodi. Per esempio: Map<String, String> env = System.getenv();

C'è un tutorial di base qui: http://java.sun.com/docs/books/tutorial/essential/environment/env.html

speranza che è di qualche aiuto.

5

Dai un'occhiata alla Commons configuration

Oppure, in alternativa utilizzare i percorsi relativi nelle proprietà del file, e caricare la directory di base tramite riga di comando come una proprietà di sistema. In questo modo i file delle proprietà rimangono indipendenti da dove viene effettivamente distribuita l'applicazione.

14

La risposta di Tom Duckering è corretta. Java non gestisce questo per te.

Ecco po 'di codice che utilizza le espressioni regolari che ho scritto per gestire l'ambiente sostituzione di variabile:

/* 
* Returns input string with environment variable references expanded, e.g. $SOME_VAR or ${SOME_VAR} 
*/ 
private String resolveEnvVars(String input) 
{ 
    if (null == input) 
    { 
     return null; 
    } 
    // match ${ENV_VAR_NAME} or $ENV_VAR_NAME 
    Pattern p = Pattern.compile("\\$\\{(\\w+)\\}|\\$(\\w+)"); 
    Matcher m = p.matcher(input); // get a matcher object 
    StringBuffer sb = new StringBuffer(); 
    while(m.find()){ 
     String envVarName = null == m.group(1) ? m.group(2) : m.group(1); 
     String envVarValue = System.getenv(envVarName); 
     m.appendReplacement(sb, null == envVarValue ? "" : envVarValue); 
    } 
    m.appendTail(sb); 
    return sb.toString(); 
} 
8

che è giusto. Java non gestisce la sostituzione del valore delle variabili di ambiente. Anche Java potrebbe non riconoscere variabili come $ EXT_DIR. Durante l'utilizzo di tali variabili potresti riscontrare FileNotFoundException. Ma Java riconoscerà le variabili che sono definite con -D in catalina.sh. Quello che voglio dire con questo, si supponga di avere una tale definizione in catalina.sh

CATALINA_OPTS="-Dweb.external.dir="$EXT_DIR" 

Nelle proprietà File uso $ {} web.external.dir invece di utilizzare * $ EXT_DIR * . E durante l'accesso questa proprietà nel codice che si possa fare in questo modo:

String webExtDir = System.getProperty("web.external.dir"); 

auguriamo che questo possa aiutare un sacco di gente in modo che non dovranno raccogliere i pezzi da tutte le parti, che impiega davvero tanto tempo per risolvere un problema a portata di mano.

Problemi correlati