Ho un'applicazione Web che si basa su alcune risorse e parametri da configurare dopo l'installazione, come una connessione JDBC.Come fornire una configurazione del contesto per un'applicazione Web in Tomcat?
Quello che mi è venuto in mente è fornire un META-INF/context.xml
che viene copiato in [engine-name]/[server-name]/[app-name].xml
da Tomcat quando distribuisco l'applicazione. In questo modo tutto ciò che sto fornendo è un file di guerra che può essere copiato nella cartella appBase (webapps). La documentazione di Tomcat says se esiste un file di questo tipo non verrà sovrascritta, il che è davvero eccezionale, poiché le modifiche apportate dopo la distribuzione non andranno perse.
Ma c'è un sottile problema qui: Poiché distribuiamo l'applicazione copiando nella directory webapps, Tomcat prima disinstallerà l'applicazione esistente e il file di configurazione. In questo modo il file di configurazione verrà perso/sovrascritto, il che non è desiderabile. Tomcat won't modifica questo comportamento per quanto ne so.
La domanda è: C'è un modo per ovviare a questo problema installando l'applicazione in modo che Tomcat non rimuova il file di configurazione esistente. Oppure, c'è un modo migliore di confezionare l'applicazione?
Si noti che non si desidera impostare autoDeploy su false e non è possibile utilizzare l'intervento umano per l'installazione (che esclude l'utilizzo dell'applicazione Web Tomcat Manager).
Se ottengo il file di configurazione dal file .war e lo copio separatamente come [engine-name]/[server-name]/[app-name].xml
, Tomcat lo associa ancora alla mia applicazione e lo rimuovo una volta che copio un nuovo file .war.
Un altro presupposto è: non conosciamo in anticipo i valori per la configurazione. Forniremo solo una configurazione di esempio (un segnaposto, se lo si desidera) mentre la configurazione effettiva verrà eseguita in un momento successivo (non necessariamente nel tempo di installazione).
Grazie
non puoi rimuovere il tuo file context.xml dalla guerra e metterlo direttamente dove Tomcat ha bisogno? Non sarebbe più disinstallato e reinstallato. Sul molo, è così che funziona la distribuzione a caldo – Snicolas
Ho provato che, se il file corrisponde al modello [engine]/[host]/[app] .xml, è considerato come parte dell'applicazione, anche se non era nel file .war (o_O). – n0rm1e
Non è possibile fornire script di compilazione per tutti i diversi ambienti in modo da non dover modificare nulla dopo la distribuzione? – home