web-dev-qa-db-fra.com

Passer VM Argument à Apache Tomcat

J'ai un webProject avec un argument VM appelé "-Dfolder"

J'utilise cet argument sur applicationContext comme ceci:

<value>file:${FNET_CORE_CONFIG}/conf/${folder}/jdbc.properties</value>

Dans Eclipse, pour les tests, j'utilise "Run Configuration" pour définir la valeur comme ceci:

-Dfolder=Dev

Maintenant, je veux tester ma webapp sur Apache Tomcat, je dois donc définir/envoyer le dossier VM Argument.

Comment je fais ça?

Je dois utiliser setenv.sh? Comment?. Quelqu'un peut-il me donner un exemple?

Merci et désolé pour mon anglais

23
Mark Comix

Je ne sais pas quelle version de Tomcat vous utilisez, mais dans Tomcat 7 dans le fichier catalina.sh vous pouvez spécifier la variable CATALINA_OPTS et cette variable passera à jvm.

Mais peut-être que définir une variable d'environnement n'est pas le meilleur moyen d'atteindre votre objectif. Le mieux sera peut-être de créer un fichier "app.properties" séparé, et de l'inclure dans applicationContext comme ceci:

<context:property-placeholder location="classpath*:app.properties" />

Et une solution pour catalina.sh

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in Java_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.

exemple:

CATALINA_OPTS = "- Dfolder = Dev"

MODIFIER:

pour Windows, cela devrait être quelque chose comme set CATALINA_OPTS="-Dfolder=Dev"

MODIFIER:

Dans la configuration Spring, vous pouvez utiliser la propriété système comme $ {propertyname}, et également inclure un fichier avec la définition de propriété, avec context:property-placeholder, et toutes les propriétés définies dans ce fichier deviennent également disponibles dans la configuration.

Par exemple, vous avez des propriétés d'ensemble de base: config.properties et un ensemble de fichiers avec des paramètres de connexion db (DEV.properties, UAT.properties, PROD.properties). Alors, comment pouvez-vous inclure différentes propriétés pour différents environnements? Cela peut être fait de plusieurs façons, par exemple, définir les propriétés système dans catalina.bat

set CATALINA_OPTS="-Dbuild=DEV"

et dans applicationConfig.xml

<context:property-placeholder location="classpath*:${build}.properties, classpath*:config.properties" />

Ou vous pouvez créer une configuration de build différente et inclure dans WAR final une seule propriété (DEV, UAT, PROD) pour chaque configuration de build. Dans applicationConfig, définissez quelque chose comme:

<context:property-placeholder location="classpath*:*.properties" />
27
user1516873

Accédez à $ CATALINA_HOME et modifiez setenv.sh fichier en ajoutant les paramètres avec la valeur. Si vous souhaitez masser plusieurs paramètres, séparez-les à l'aide de space

Par exemple.

cd /opt/Tomcat/bin/ 
Sudo nano setenv.sh 

modifier la ligne

CATALINA_OPTS="${CATALINA_OPTS}" 

à

CATALINA_OPTS="${CATALINA_OPTS} -Dparam=value -Dparam2=value2" 

redémarrez Tomcat:

service Tomcat restart

vous devriez maintenant pouvoir voir les arguments passés à Tomcat lorsque vous exécutez:

ps aux | grep Tomcat
14
biniam

Faites-le fonctionner dans Windows, en générant un fichier setenv.bat dans le même répertoire que catalina.bat et startup.bat (comme recommandé dans catalina.bat) et mettez le contenu du .bat:

set CATALINA_OPTS="-DyourVariableName=yourValue"

C'est tout. J'ai aimé cette façon car elle a l'air assez propre

4
Osmar