Apache Tomcat ミニTips


Webアプリケーションの手動起動・手動リロード
Tomcatを起動したまま、 バッチ処理などで特定のアプリケーションだけ起動・停止したりリロードしたりできます。

  1. $CATALINE_HOME/conf/tomcat-users.xml に、manager-script ロールを持つユーザーを定義します。

    <role rolename="manager-script"/>
    <user username="admin" password="password" roles="manager-script"/>
    

  2. $CATALINE_HOME/conf/Catalina/localhost/manager.xml を作成して、 RemoteIpValveで接続IPを制限している場合、実行するホストのIPアドレスからの接続を許可します。
  3. Tomcatを再起動します。
  4. 次のコマンドでリロードできます。

    curl --user admin:password http://localhost:8080/manager/text/reload?path=/app1
    

    reloadの部分をstartやstopにするとそれぞれ起動、停止ができます。
    注意点として、停止しているWebアプリケーションに対してreloadを実行してもエラーとなり、起動できません。
    停止状態から起動するには必ず start を使う必要があります。
    また本題のTomcatとは関係ありませんが、http_proxy環境変数を定義している場合、 curlコマンドは環境によってはURLがlocalhostや127.0.0.1でもプロキシの外へ見に行こうとするようです。
    プロキシを見ているかどうかはcurlの-vオプションで出力を見ると分かります。
    明示的にプロキシを見ないようにするには、

    curl --noproxy 127.0.0.1 --user admin:password http://127.0.0.1:8080/manager/text/reload?path=/app1
    

    とすればOKです。


コンテキストXMLファイルからWebappにパラメータを渡す
JNDIリソースと同様に、Webアプリケーションの中に機密的な情報を記述せず、 TomcatのコンテキストXMLファイルで定義しておき、Webアプリケーションに渡すには、 ParameterとEnvironmentという方法があります。 XMLファイルには通常ValveとかResourceなどの要素がありますが、 そこにParameterとEnvironmentという要素も書けるということです。
ではそれぞれ書いてみましょう。 $CATALINA_HOME/conf/Catalina/localhost/app1.xml の例です。

<Context docBase="app1">

  <Parameter name="config.param.db.password" value="secret123A" override="false" />

  <Environment name="config.env.db.password" value="secret123B" type="java.lang.String" />

</Context>

それぞれ、Javaコードからの取得方法は次の通りです。

import javax.naming.Context;
import javax.naming.InitialContext;

// Parameterから取得する
String paramValue = servletContext.getInitParameter("config.param.db.password");

// Environmentから取得する
Context c = new InitialContext();
String envValue = (String) c.lookup("java:comp/env/config.env.db.password");

Server Side Java Index Top

(first uploaded 2024/11/26 last updated 2025/04/19, URANO398 - KQ TAURA)