Variables environment Tomcat

De EjnTricks
Révision de 3 janvier 2018 à 16:29 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Cet article présente une façon simple de compléter les variables d'environnement de Tomcat lors de son démarrage. En effet, certaines applications peuvent nécessiter de spécifier des variables d'environnement spécifiques, comme la variable JENKINS_HOME pour une instance Jenkins.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Study icon.png Analyse

Le démarrage de Tomcat s'effectue par l'exécution du script /usr/share/tomcat8/bin//catalina.sh. Celui-ci contient une référence à un script setenv.sh qui permet donc de spécialiser l'instance en cours de démarrage.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

A noter pour une installation sous Ubuntu, les variables CATALINA_BASE et CATALINA_HOME sont spécifiées lors du démarrage par le script /etc/init.d/tomcat8

# Directory where the Tomcat 8 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME


Pour rappel, lors du démarrage de l'application, les instructions suivantes sont exécutées.

  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -classpath "\"$CLASSPATH\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/policy/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 "&"

  else
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -classpath "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 "&"

  fi

Il est donc possible d'agir sur un ensemble de variables, JAVA_OPTS ou CATALINA_OPTS par exemple. Il est important de se référer aux commentaires en début de script, indiquant qu'il est préférable de modifier CATALINA_OPTS si l'on souhaite spécifier une variable uniquement lors du démarrage.

#   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.

La variable JAVA_OPTS est utilisée quelque soit la commande exécutée.

#   JAVA_OPTS       (Optional) Java runtime options used when any command
#                   is executed.
#                   Include here and not in CATALINA_OPTS all options, that
#                   should be used by Tomcat and also by the stop process,
#                   the version command etc.
#                   Most options should go into CATALINA_OPTS.


Configuration-icon.png Configuration

Dans le cadre de cette analyse, le script sentenv.sh est placé au niveau de CATALINA_BASE, car c'est dans cet emplacement que sont installé historiquement les applications, soit à l'emplacement /var/lib/tomcat8/bin/setenv.sh. La première modification mise en place permet d'augmenter la mémoire allouée.

#!/bin/sh

export CATALINA_OPTS="-Xms256m -Xmx512m"


Windows-icon.png Windows

L'explication ci dessus s'applique pour une instance déployée sous Linux. Le principe reste le même pour une utilisation sous Windows.

Study icon.png Analyse

Le démarrage de Tomcat s'effectue depuis le script bin/catalina.bat qui contient une référence au script setenv.bat.

rem Get standard environment variables
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
call "%CATALINA_BASE%\bin\setenv.bat"
goto setenvDone
:checkSetenvHome
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
:setenvDone

Configuration-icon.png Configuration

Dans le cadre de cette analyse, le script sentenv.bat. La modification mise en place permet de spécifier la variable JAVA_HOME, afin de spécifier la version de Java utilisée sans modifier des variables globales d'environnement de Windows.

set JAVA_HOME=C:\Apps\Java\jdk1.8.0_144