Configurazioni di progetto per progetti Java

0

Come memorizzare le configurazioni per il progetto in Java. Normalmente lo ho memorizzato in "src / main / resources /" con * .properties. Qual è l'approccio migliore per la memorizzazione dei progetti di configurazione per ambienti di sviluppo, locali, di produzione?

Ho provato a usare * .prop con struttura seguente

resources
|_ config
   |_local
   |_development
   |_production
   |_environment.properties

Voglio evitare la struttura.

    
posta Rinat Muhamedgaliev 07.10.2014 - 09:31
fonte

1 risposta

2

A mio modesto parere, l'approccio migliore qui è avere una configurazione interna ed esterna. La configurazione interna contiene tutti i valori predefiniti e sarà contenuta nella cartella delle risorse. La configurazione esterna è un file delle proprietà distribuito con il tuo programma che viene letto successivamente e sostituisce qualsiasi valore predefinito.

Per i test, è bello perché hai già tutto il necessario per eseguire il programma senza alcuna configurazione aggiuntiva. In produzione, è possibile sostituire uno o più valori come necessario senza riscrivere il programma. Vedi sotto per un esempio su come caricare la configurazione:

private static Properties getConfiguration() throws IOException {
    final Properties configProperties = new Properties();

    // Attempt to read internal configuration
    InputStream configStream = null;
    try {
        configStream = Main.class.getResourceAsStream("/configuration.properties");
        if(configStream != null) {
            configProperties.load(configStream);
        }
    } finally {
        if(configStream != null) {
            configStream.close();
        }
        configStream = null;
    }

    // Attempt to read external configuration (overriding as necessary)
    try {
        final File configFile = new File("configuration.properties");
        if(configFile.isFile()) {
            configStream = new FileInputStream(configFile);

            configProperties.load(configStream);
        }
    } finally {
        if(configStream != null) {
            configStream.close();
        }
    }
    return configProperties;
}

Assicurati di regolare i percorsi come necessario, anche se personalmente preferisco mantenere la configurazione principale in un punto ovvio sia nel mio percorso di classe delle risorse sia esternamente.

Si noti che, a seconda delle informazioni contenute nella configurazione, si consiglia di escludere alcune informazioni dalla propria configurazione interna . Un esempio potrebbe essere informazioni per connettersi a un database. In tal caso, durante il test, fornisci tu stesso la configurazione esterna che ha tutte le informazioni mancanti sulla connessione al database. Quando esegui la distribuzione, ometti la configurazione esterna e ne crei una nuova per il tuo cliente (la pratica migliore impone di controllare l'esistenza di questi parametri per una buona misura e genera un'eccezione appropriata se mancante).

Spero che ti aiuti!

    
risposta data 07.10.2014 - 09:59
fonte

Leggi altre domande sui tag