J'utilise Tomcat et je souhaite obtenir une variable d'environnement dans mon code Java.
Pour définir une variable d’environnement, j’utilise cette commande bash:
export Tomcat_OPTS=-Dmy.var=foo
Après je lance Tomcat
./startup.sh (in bin folder of Tomcat)
Dans mon code Java, j'essaie d'obtenir cette variable:
System.getEnv("my.var")
Mais il retourne NULL.
Comment puis je faire ça ?
Je précise que si j'utilise maven pour lancer Tomcat et utiliser l'onglet environnement Eclipse, la variable est trouvée! Mais je dois lancer Tomcat comme ci-dessus en mode production.
EDIT: lorsque vous utilisez export MY_VAR directement, il s’exécute en local mais pas sur mon serveur ...
J'ai enfin trouvé un fichier de configuration nommé Tomcat6.conf dans CATALINA_HOME. J'ajoute export my.var = foo à la fin du fichier et System.getenv ("my.var") renvoie maintenant la valeur ...
Cauchemar...
System.getEnv
renvoie des variables d'environnement telles que PATH ou, dans votre exemple, Tomcat_OPTS).
Lorsque vous appelez Java avec -Dfoo=bar
, vous ne définissez pas de variable d'environnement: vous transmettez une propriété système. Utilisez System.getProperty
pour obtenir la valeur de foo.
si vous utilisez Tomcat 7 et Ubuntu OS, vous pouvez modifier le fichier/etc/default/Tomcat7, ajoutez simplement une ligne de votre voiture = votre valeur le fera.
comme ci-dessous:
# Run Tomcat as this user ID. Not setting this or leaving it blank will use the
# default of Tomcat7.
Tomcat7_USER=Tomcat7
# Run Tomcat as this group ID. Not setting this or leaving it blank will use
# the default of Tomcat7.
Tomcat7_GROUP=Tomcat7
IM4Java_TOOLPATH=/usr/local/bin/
# The home directory of the Java development kit (JDK). You need at least
# JDK version 1.5. If Java_HOME is not set, some common directories for
# OpenJDK, the Sun JDK, and various J2SE 1.5 versions are tried.
#Java_HOME=/usr/lib/jvm/openjdk-6-jdk
# You may pass JVM startup parameters to Java here. If unset, the default
# options will be: -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
#
# Use "-XX:+UseConcMarkSweepGC" to enable the CMS garbage collector (improved
# response time). If you use that option and you run Tomcat on a machine with
# exactly one CPU chip that contains one or two cores, you should also add
# the "-XX:+CMSIncrementalMode" option.
Java_OPTS="-Djava.awt.headless=true -Xmx2048m -XX:+UseConcMarkSweepGC"
dans Tomcat8 installé en décompressant simplement l'archive, il existe un fichier appelé " catalina.properties "
Vous pouvez introduire des variables d’environnement dans ce fichier en ajoutant simplement
my.special.variable=some_value
Ensemble:
/etc/default/Tomcat7
Ajouter la ligne somekey=value
Remarque: le nom de la variable ne peut pas contenir de points.
service Tomcat7 restart
Lis:
System.getenv("somekey");
Il existe un fichier de configuration pour Tomcat, situé par défaut à /dev/Tomcat6/Tomcat6.conf
Je crois (consultez /etc/init.d/Tomcat pour connaître la valeur de "Tomcat_CFG". Il s'agit de "source" .
dans ce fichier (. $Tomcat_CFG
) avant Tomcat est démarré (ou arrêté, redémarré, etc.), donc si vous ajoutez la ligne:
MY_VAR=somevalue
Cela devrait être disponible pour votre application Java.
Je sais que c'est une vieille question, mais peut-être que ce sera utile à quelqu'un d'autre :)
Si vous souhaitez définir la variable d'environnement dans Tomcat pour qu'elle entre par getEnv , utilisez setenv .
C'est à dire. dans Tomcat/bin vous avez (ou devez créer) setenv.sh
(ou setenv.bat
pour шindoшs) et définissez
my.var=FOO
OTHERVAR=BOO
en le préfixant avec set
pour шindoшs.
Maintenant que vous venez de m'expliquer que vous utilisez une installation basée sur yum (qui suggère un dérivé de la distribution Red Hat), si vous exécutez votre Tomcat en tant que démon, vous devez définir la commande "export Tomcat_OPTS = ...". dans votre/etc/profile (pour la portée globale), ou ajoutez-le dans votre fichier ~/.profile ou ~/.bashrc à la maison de l'utilisateur qui démarre l'instance de Tomcat.
Utilisez-vous Tomcat sur Eclipse IDE? Ensuite, il vous suffit de suivre ces étapes: