|
Apache Tomcat ミニTips
Webアプリケーションの手動起動・手動リロード
Tomcatを起動したまま、
バッチ処理などで特定のアプリケーションだけ起動・停止したりリロードしたりできます。
-
$CATALINE_HOME/conf/tomcat-users.xml に、manager-script ロールを持つユーザーを定義します。
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-script"/>
|
-
$CATALINE_HOME/conf/Catalina/localhost/manager.xml を作成して、
RemoteIpValveで接続IPを制限している場合、実行するホストのIPアドレスからの接続を許可します。
-
Tomcatを再起動します。
-
次のコマンドでリロードできます。
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");
|

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