Tomcat load-on-startup 0が最速は嘘 (実験編)

2010-10-26 追記: 現在のバージョンでは0が最速になっているとのことです。以下古い情報なのでご注意を。

一番最初に起動させたいServletの load-on-startup を0にするのが嘘かどうかを試してみた。

id:smeghead:20070327:loadonstartup ではソースを見てみたが、簡単な実験で試してみた。

初期化時に自分の名前を出力するサーブレットとweb.xmlを用意した。

windows tomcat5.0 java1.4.2 の環境でeclipse上で試した。

InitServlet.java

package inittest;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class InitServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init() throws ServletException {
        System.out.println(this.getServletName());
        super.init();
    }
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
            PrintWriter writer = res.getWriter();
            writer.println("test");
        }
}

web.xml

    init0
    inittest.InitServlet
    0
 
    init1
    inittest.InitServlet
    1
 
    init2
    inittest.InitServlet
    2
 
    init-1
    inittest.InitServlet
    -1

tomcat起動時の出力は以下。

出力

情報: コンテキスト設定ファイルのURL file:C:\Program Files\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost\loadonstartup.xml を処理しています
init1
init2
init0

init-1は、サーブレットを呼出したときに、初期化が行なわれた。

init-1

結論: web.xmlでload-on-startupに0を指定した場合、起動時の一番最後に起動される。

1が最初に初期化された。

0は起動時の最後に初期化された。

マイナスの値は、実行時に初期化された。

一番最初に起動させたいServletの load-on-startup に0を指定するのは、間違いです。っと

2件のコメント

  • 勝手ながら参考にさせていただきました。
    0と指定した場合は1よりも先にメモリーにロードされる
    ものとばかり思っていました。
    -1と指定した場合は記述しないのと一緒!?のようですね。
    ありがとうございます。

  • 私も以前、0と指定するのが一番最初にロードされると思ってましたが、違ってました。
    1から指定するようにしておけば大丈夫だと思いますが、この情報も今となっては古いので、ご注意を。

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。