Come caricare la configurazione dell'ambiente

5

In Java il modo tipico di memorizzare la configurazione è utilizzando i file di proprietà. Quindi ho diversi file di questo tipo, uno per ogni tipo di ambiente (dev, test, prod, ...).

Questa configurazione è necessaria in diverse parti del codice base, cioè in classi diverse, ma per evitare di duplicare il codice per aprire il file giusto in un oggetto Proprietà e quindi chiedere una proprietà specifica, ho deciso di avere una classe ConfigurationLoader che carica il file e mantiene l'oggetto Properties in una variabile statica.

public class ConfigurationLoader {
    static Properties configuration = new Properties().load(new FileReader("/path/to/my/file"));
    public static String getProperty(String propertyName) {
        return configuration.getProperty(propertyName);
    }
}

(Questo codice è rotto da un'eccezione non rilevata, ma l'idea è di caricare la configurazione in un blocco statico)

In questo modo tutta la configurazione viene caricata non appena questa classe viene caricata ed è disponibile per qualsiasi classe semplicemente usando ConfigurationLoader.getProperty(...) . Ovviamente è meglio non caricare la stessa proprietà in più posti e magari creare classi di "dominio di configurazione" diverse che eseguono l'analisi una volta per tutte.

Ho quindi due domande:

  • È un buon design? In particolare, vedi qualche grosso inconveniente nel rendere la configurazione disponibile globalmente?
  • Qual è il modo migliore per specificare quale configurazione di ambiente caricare (-D flag, variabile di ambiente, ...), cioè "/ percorso / a / mio / file" da usare?
posta bangnab 13.08.2015 - 11:09
fonte

1 risposta

2

Suppongo che stiate provando questo fuori da un contenitore di applicazioni, in un'applicazione java principale. Oppure, i file di proprietà non sono il modo giusto per farlo: descrittori di deployment, archivio di configurazione, ecc. È la risposta giusta.

Per la configurazione, l'idea più comune è quella di commons config , che consente di memorizzare la configurazione come XML / testo. Ha alcune funzionalità: consente l'accesso alla configurazione di XPath, consente l'accesso a elementi di configurazione multivalore come elenco, ecc.,

Il meno favorito di tutti è quello che hai specificato. Anche quello sembra essere rotto, come lo è da uno specifico percorso relativo / assoluto. Idealmente, il file dovrebbe trovarsi su classpath e dovrebbe essere letto da SystemClassLoader come InputStream nelle Proprietà.

Spero che questo aiuti.

    
risposta data 13.08.2015 - 20:05
fonte

Leggi altre domande sui tag