Abbiamo avuto un requisito configurazione simile durante la distribuzione di una webapp per i diversi sviluppatori, e su EC2 di Amazon: come si fa a separare configurazione dal codice binario? Nella mia esperienza, JNDI è troppo complesso e varia troppo tra i contenitori da utilizzare. Inoltre, l'XML di modifica manuale è molto suscettibile agli errori di sintassi, quindi l'idea è stata buttata fuori. Abbiamo risolto questo con un design basato su alcune regole:
1) solo il nome semplice = voci di valore devono essere utilizzati
2) nuove configurazioni dovrebbe essere caricabile modificando solo un parametro
3) la nostra GUERRA binario deve essere riconfigurabile w/o il riconfezionamento è
4) parametri sensibili (password) non potrà mai essere confezionati nel binario
utilizzando .properties file per tutte le configurazioni, e l'utilizzo di System.getProperty("domain");
per caricare i file delle proprietà appropriate, siamo stati in grado di soddisfare i requisiti. Tuttavia, la proprietà di sistema non punta a un URL di file, ma abbiamo creato un concetto che chiamiamo "dominio" per specificare la configurazione da utilizzare. La posizione della configurazione è sempre:
$HOME/appName/config/$DOMAIN.properties
.
Quindi, se voglio fare funzionare il mio app usando il mio propria configurazione, io avviare l'applicazione impostando il dominio al mio nome:
-Ddomain=jason
all'avvio, e l'applicazione carica il file:
/home/jason/appName/config/jason.properties
Questo consente agli sviluppatori di condividere configurazioni in modo da ricreare lo stesso stato dell'app per test e distribuzione senza ricompilare o riconfezionare. Il valore del dominio viene quindi utilizzato per caricare .properties da una posizione standard, all'esterno del WAR in bundle.
posso completamente ricreare l'ambiente di produzione sulla mia workstation utilizzando la configurazione di produzione come:
-Ddomain=ec2
che caricare:
/home/jason/appName/config/ec2.properties
Questa configurazione ci permette di fare avere cicli dev/QA/rilascio con esattamente un set di binari compilati, utilizzando diverse configurazioni in ogni ambiente. Non c'è il rischio di avere password/etc in bundle nei binari, e le persone possono condividere le loro configurazioni per ricreare i problemi che stiamo vedendo.
fonte
2009-06-18 17:38:53
Java EE 8 potrebbe introdurre qualcosa chiamato "servizio di configurazione" per cose come questa. Vedi http://www.jfokus.se/jfokus13/preso/jf13_JavaEEConfiguration.pdf vedi anche http: // java.net/jira/browse/JAVAEE_SPEC-19 –
Perché non utilizzare gli argomenti jva? – djmj