2012-12-24 22 views
9

Mi chiedo quale dei seguenti è un approccio preferito?Quando utilizzare le variabili di ambiente e le proprietà di sistema?

Siamo in grado di impostare le cose come APP_HOME=/path/to/file (export in .profile o qualcosa del genere) e l'accesso come System.getenv("APP_HOME")

Oppure, in alternativa, utilizzando le proprietà come -DAPP_HOME=/path/to/file e l'accesso come System.getProperty("APP_HOME")

Ora .. sia uno renderà il valore disponibile per il punto di vista dell'applicazione, ma l'approccio è preferibile? Perché? Quando?

+2

perché uno essere preferito rispetto all'altro? Gli oggetti env di IMO dovrebbero essere sovrascritti dalle opzioni specificate tramite -D, ma a parte questo, meh. –

+1

Bene, abbiamo 2 opzioni per fare la stessa cosa, giusto? Quindi la domanda – JAM

+0

Perché non usare entrambi? Cerca le proprietà del sistema per la chiave e, se non ci sono, cerca nell'ambiente. Non sono proprio la stessa cosa, dal momento che si richiede che il valore sia impostato esplicitamente per l'applicazione e l'altro no. –

risposta

5

Se si utilizza Java 1.3 o 1.4 (e 1.2, IIRC), si dovrebbero usare le proprietà di sistema, dal momento che System.getenv è stato dichiarato obsoleto. È stato ripristinato in Java 1.5. Il rapporto bug pertinente può essere trovato here.

È possibile utilizzare entrambi. Cerca le proprietà del sistema per la chiave e, se non è presente, cerca nell'ambiente. Questo ti dà il meglio di entrambi i mondi.

Questi in realtà non sono la stessa cosa: uno richiede che il valore sia impostato in modo esplicito e l'altro no. Inoltre, si noti che l'ambiente è un posto conveniente dove inserire alcune stringhe per l'interoperabilità.

+1

Con l'avvertimento che è 'System.getenv', non' getEnv'. –

+0

@DaveNewton: Grazie per la correzione. Risolverà. –

+0

Il metodo System.getenv() non deve essere utilizzato per accedere alle variabili di ambiente perché non tutte le piattaforme supportano le variabili di ambiente. - Ragionamento fornito dallo strumento di analisi del codice CodePro –

15

Il Javadoc per System.getenv(String) indirizzi questa domanda direttamente, saying:

sistema proprietà e variabili d'ambiente sono entrambi mappature concettualmente tra nomi e valori. Entrambi i meccanismi possono essere utilizzati per passare le informazioni definite dall'utente a un processo Java . Le variabili di ambiente hanno un effetto più globale, perché sono visibili a tutti i discendenti del processo che le definisce, non solo al sottoprocesso Java immediato. Possono avere semantica sottilmente diversa, come il caso insensibilità, su diversi sistemi operativi. Per questi motivi , è più probabile che le variabili di ambiente abbiano effetti collaterali indesiderati . È preferibile utilizzare le proprietà di sistema ove possibile. Le variabili di ambiente devono essere utilizzate quando si desidera un effetto globale oppure quando un'interfaccia di sistema esterna richiede una variabile di ambiente (ad esempio PATH).

(sottolineatura mia).

0

Impossibile commentare ancora al momento, quindi aggiungerò un paio di punti come risposta.

Sono d'accordo con la frase di javadoc "È meglio usare le proprietà di sistema dove possibile.", Anche nelle mie stesse parole precedenti a vedere questa pagina qui che le variabili di sistema Java sono incapsulate all'interno della JVM. Non sono visibili ad altri processi sull'host e quindi meno associati al sistema host.

Inoltre, ci sono più interfacce per impostare le variabili di ambiente globali, e quindi potrebbe essere un po 'complicato tenere traccia di tutti i valori utilizzati nel tempo.

Problemi correlati