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を指定するのは、間違いです。っと

3件のコメント

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

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

  • The subsequent time I read a blog, I hope that it doesnt disappoint me as a lot as this one. I mean, I do know it was my option to learn, however I actually thought youd have one thing fascinating to say. All I hear is a bunch of whining about something that you could possibly fix when you werent too busy searching for attention.

コメントする

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


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください