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?