Come accedere alla configurazione specifica dell'ambiente in un'applicazione aziendale?

3

La mia applicazione è un'applicazione aziendale generica che può essere distribuita su qualsiasi server di applicazioni in esecuzione su qualsiasi sistema operativo.

Non so come / dove configurare la mia applicazione, ad eccezione delle informazioni del database che sono archiviate nel server delle applicazioni come origine dati.

Sebbene sia facile da fare, potrei usare il database come contenitore di configurazione, ma ... il database non dovrebbe contenere gli elementi di configurazione: voglio poter usare qualsiasi database in qualsiasi ambiente (dev, test, accettazione, produzione).

Java EE offre un tipo di gestione della configurazione simile a ciò che viene offerto alle origini dati? Se sì, che cos'è? In caso contrario, qual è la migliore pratica su questo?

Spesso leggo il seguente consiglio: metti questi elementi in un file di proprietà sul server. Bene, ma in quel caso la posizione del file delle proprietà diventa di per sé un elemento di configurazione, quindi dove / come posso definire la posizione di quel file delle proprietà e trasmettere tali informazioni alla mia applicazione?

    
posta Olivier Grégoire 03.02.2016 - 14:52
fonte

1 risposta

2

Ci sono un paio di opzioni che si presentano in questo caso.

Il primo è il file delle proprietà. La sua posizione è da qualche parte e tipicamente nel percorso della classe. In genere, lo vedrai accoppiato con getResource famiglia di chiamate.

Properties prop = new Properties();
prop.load(this.getClass().getResourceAsStream("stuff.properties");

Ora, se non hai il file delle proprietà nel classpath, puoi specificarlo nelle proprietà system a cui è possibile accedere attraverso la classe System come descritto here .

Con il richiamo di: java -Dtest="true" -jar myApplication.jar il valore può essere estratto con: System.getProperty("test") e quindi utilizzato per specificare altre risorse o essere una risorsa stessa. Anche se non è immediatamente visibile con molti application server, è ancora lì, da qualche parte. In Eclipse, puoi facilmente vederli andando alla configurazione di esecuzione e guarda gli argomenti della VM.

Come per le proprietà di sistema, ci sono le proprietà ambiente accessibili tramite System.getenv . Il resto di questo insieme di documenti è una buona lettura - L'ambiente della piattaforma . Mentre parla principalmente di Java SE, quasi tutto ciò che è in esso è ancora applicabile e un'opzione per Java EE (non penso che starai guardando a Java Web Start o alle applet Java).

Passando al regno del server delle applicazioni, arriviamo ai nomi memorizzati nel contesto dell'applicazione o del server.

InitialContext ic = new InitialContext();
loc = (String) ic.lookup("java:com/env/app/location");

Questo valore è effettivamente memorizzato nella configurazione del server stesso. La documentazione per tomcat . Tieni presente che ciascun server delle app è diverso e potresti trovare un po 'di brutto laggiù. L'unica differenza tra il database di JNDI e una stringa è il tipo che presenta. Uno è un DataSource, l'altro è una String.

    
risposta data 03.02.2016 - 15:21
fonte

Leggi altre domande sui tag