Domanda

Potresti avere un set di proprietà utilizzato sul computer dello sviluppatore, che varia da sviluppatore a sviluppatore, un altro set per un ambiente di gestione temporanea e un altro ancora per l'ambiente di produzione.

In un'applicazione Spring potresti anche avere bean che desideri caricare in un ambiente locale ma non in un ambiente di produzione e viceversa.

come fai a gestirlo?Utilizzi file separati, filtraggio delle risorse ant/maven o altri approcci?

È stato utile?

Soluzione

Ho semplicemente inserito le varie proprietà in JNDI.In questo modo è possibile configurare ciascuno dei server e posso avere UN file war.Se l'elenco delle proprietà è grande, ospiterò i file delle proprietà (o XML) su un altro server.Utilizzerò JNDI per specificare l'URL del file da utilizzare.

Se stai creando file di app diversi (war/ear) per ciascun ambiente, non stai distribuendo lo stesso war/ear che stai testando.

In una delle mie app utilizziamo diversi servizi REST.Ho appena inserito l'URL di root in JNDI.Quindi in ciascun ambiente, il server può essere configurato per comunicare con il servizio REST appropriato per quell'ambiente.

Altri suggerimenti

Utilizzo semplicemente file di configurazione Spring XML diversi per ciascuna macchina e mi assicuro che tutti i bit di dati di configurazione che variano tra le macchine facciano riferimento ai bean caricati da tali file di configurazione Spring.

Ad esempio, ho un'app Web che si connette a un'interfaccia RMI Java di un'altra app.La mia app ottiene l'indirizzo dell'interfaccia RMI di quest'altra app tramite un bean configurato nel file di configurazione Spring XML.Sia la mia app che l'altra app hanno istanze di sviluppo, test e produzione, quindi ho tre file di configurazione per la mia app: uno che corrisponde alla configurazione appropriata per l'istanza di produzione, uno per l'istanza di test e uno per lo sviluppo esempio.

Quindi, l'unica cosa che devo tenere a mente è quale file di configurazione viene distribuito su quale macchina.Finora non ho avuto problemi con la strategia di creare attività Ant che gestiscano la copia del file di configurazione corretto prima di generare il mio file WAR;quindi, nell'esempio precedente, ho tre attività Ant, una che genera la WAR di produzione, una che genera la WAR di sviluppo e una che genera la WAR di test.Tutte e tre le attività gestiscono la copia del file di configurazione corretto nel posto giusto, quindi richiamano lo stesso passaggio successivo, ovvero la compilazione dell'app e la creazione del WAR.

Spero che ciò abbia un senso...

Utilizziamo file di proprietà specifici per gli ambienti e facciamo in modo che la build della formica selezioni il set corretto durante la costruzione dei jar/war.

Elementi specifici dell'ambiente possono essere gestiti anche tramite il servizio di directory (JNDI), a seconda del server dell'app.Usiamo Tomcat e il nostro DataSource è definito nell'implementazione JNDI di sola lettura di Tomcat.La primavera rende la ricerca molto semplice.

Utilizziamo la strategia formica anche per creare siti diversi (contenuti diversi, ruoli di sicurezza, ecc.) anche dallo stesso progetto sorgente.

C'è una cosa che ci crea qualche problema con questa strategia di compilazione, ed è che spesso i file e le directory non esistono finché la compilazione non viene eseguita, quindi può rendere difficile scrivere veri test di integrazione (usando lo stesso set di molle come quando vengono distribuiti) che sono eseguibili dall'interno dell'IDE.Perdi anche alcune delle capacità dell'IDE di verificare l'esistenza di file, ecc.

Utilizzo Maven per filtrare le risorse in src/main/resources nel mio progetto.Lo utilizzo in combinazione con i file delle proprietà per inserire attributi personalizzati nei miei progetti basati su Spring.

Per le build predefinite, ho un file delle proprietà nella mia directory home che Maven utilizza quindi come sostituzioni (quindi cose come la mia installazione Tomcat locale vengono trovate correttamente).Il server di test e il server di produzione sono i miei altri profili.Un semplice -Pproduction è tutto ciò che serve per creare un'applicazione per il mio server di produzione.

Utilizzare file di proprietà diversi e utilizzare filtri di sostituzione formica che eseguiranno la sostituzione in base all'ambiente per il quale viene eseguita la compilazione.Vedere http://www.devrecipes.com/2009/08/14/environment-specific-configuration-for-java-applications/

File di configurazione separati, archiviati nel repository del controllo del codice sorgente e aggiornati manualmente.In genere la configurazione non cambia radicalmente tra una versione e la successiva quindi la sincronizzazione (anche manuale) non è un grosso problema.

Per sistemi altamente scalabili in ambienti di produzione lo farei sul serio consiglia uno schema in cui i file di configurazione sono conservati in modelli e, come parte dello script di compilazione, questi modelli vengono utilizzati per eseguire il rendering dei file di configurazione "finali" (tutti gli ambienti dovrebbero utilizzare lo stesso processo).

Recentemente ho utilizzato Maven anche per configurazioni alternative per ambienti live o di staging. Configurazione della produzione utilizzando i profili Maven.Spero che sia d'aiuto.

Utilizzo la copia di Ant con un file filtro.Nella directory con il file di configurazione con variabili ho una directory con un file per ogni ambiente.Lo script di build conosce l'env e utilizza il file delle variabili corretto.

Ho diverse cartelle di configurazione che contengono le configurazioni per la distribuzione di destinazione e utilizzo ANT per selezionare quella da utilizzare durante la fase di copia dei file.

Usiamo diversi bersagli di formiche per ambienti diversi.Il modo in cui lo facciamo potrebbe essere un po’ inelegante ma funziona.Diremo semplicemente ad alcuni target formica di filtrare diversi file di risorse (che è il modo in cui potresti escludere determinati bean dal caricamento), caricare diverse proprietà del database e caricare diversi dati seed nel database.Non abbiamo davvero un "esperto" di formiche in giro, ma siamo in grado di eseguire le nostre build con diverse configurazioni da un singolo comando.

Una soluzione che ho visto utilizzata è configurare l'ambiente di staging in modo che sia identico all'ambiente di produzione.Ciò significa che ogni ambiente ha una VLAN con lo stesso intervallo IP e ruoli macchina sugli stessi indirizzi IP (ad es.l'IP del db cluster è sempre 192.168.1.101 in ogni ambiente).I firewall hanno mappato gli indirizzi esterni sui server Web, quindi scambiando i file host sul PC è possibile utilizzare lo stesso URL: http://www.myapp.com/webapp/file.jsp andrebbe allo staging o alla produzione, a seconda del file host in cui hai effettuato lo scambio.

Non sono sicuro che questa sia una soluzione ideale, è piuttosto complicato da mantenere, ma è interessante da notare.

Caleb P e JeeBee probabilmente hanno la soluzione più veloce.Inoltre non è necessario impostare servizi diversi o puntare a file su macchine diverse.Puoi specificare il tuo ambiente utilizzando una variabile ${user.name} o specificando il profilo in un argomento -D per Ant o Maven.

Inoltre in questa configurazione è possibile avere un file delle proprietà generico e sovrascrivere i file delle proprietà per ambienti specifici.Sia Ant che Maven supportano queste funzionalità.

Non dimenticare di esaminare PropertyPlaceholderConfigurer: questo è particolarmente utile negli ambienti in cui JNDI non è disponibile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top