web-dev-qa-db-fra.com

Externalisation de la configuration d'application Web Tomcat à partir d'un fichier .war

Je ne parviens pas à configurer une application Web dans Tomcat 7. Dans mon fichier WAR, il existe un fichier de propriétés myApp/WEB-INF/classes/myProps.props, qui contient les propriétés propres à l'environnement. J'essaie de remplacer ce fichier de configuration sur le serveur afin que le même fichier WAR soit déployé dans plusieurs environnements.

J'ai entendu dire qu'il y avait un moyen de faire cela en utilisant des fichiers de configuration de remplacement dans Tomcat/conf/Catalina/myApp. C’est la méthode que j’ai du mal à comprendre.

De plus, myApp.war est l’un des nombreux systèmes exécutés sur le même serveur Tomcat et il ne s’exécute pas en tant qu’hôte local. Je veux pouvoir résoudre ce problème pour plusieurs des applications Web.

Server version: Apache Tomcat/7.0.23
Server built:   Nov 20 2011 07:36:25
Server number:  7.0.23.0
OS Name:        Linux
31
mfa

Votre Tomcat/conf/Catalina/<Host> peut contenir des descripteurs de contexte qui vous permettent de configurer de nombreuses choses, y compris la définition des "entrées d'environnement", accessibles depuis Java via JNDI. Il y a beaucoup de façons de l'utiliser. Personnellement, je définis une entrée d'environnement qui est le chemin du système de fichiers vers mon fichier de propriétés. Mon application est conçue pour vérifier cette entrée, et si elle n'existe pas, recherchez le fichier sur le chemin de classe. Ainsi, dans dev, nous avons les propriétés dev sur le chemin de classe, mais lorsque nous construisons et déployons, nous le pointons vers un fichier externe.

Il existe une bonne documentation pour la configuration d'un contexte sur le site Web de Tomcat. Voir la section Définition d'un contexte pour plus de détails sur la création du fichier et l'emplacement de ce dernier.

Par exemple, si votre hôte s'appelle myHost et que votre application est un fichier war nommé myApp.war dans le répertoire webapps, vous pouvez créer Tomcat/conf/Catalina/myHost/myApp.xml avec le contenu suivant:

<Context>
    <Environment name="configurationPath" value="/home/Tomcat/myApp.properties" type="Java.lang.String"/>
</Context>

Ensuite, à partir de votre code, vous feriez une recherche JNDI sur Java:comp/env/configurationPath (95% de certitude ici) pour obtenir cette valeur de chaîne.

60
Ryan Stewart

Vous pouvez essayer de placer votre configuration (fichier de propriétés) dans Apache Tomcat\lib dans un fichier JAR et de la supprimer de l'application Web. Lorsque le chargeur de classes de Tomcat ne trouvera pas votre configuration dans une application Web, il essaiera de le trouver dans le répertoire "lib". Vous pouvez donc externaliser votre configuration en déplaçant simplement la configuration dans le répertoire lib global (partagé entre d’autres applications Web).

1
bmoc

Je viens d'ajouter un script setenv.bat ou setenv.sh dans le dossier bin de Tomcat. Définissez la variable classpath comme

set CLASSPATH=my-propery-folder
0
baliman