Embedded-Jettyの一時ディレクトリの指定

2019年11月1日

※Jettyに関する全投稿は/tag/jettyにあるので参照されたい。

Jettyがデフォルトで使用する一時ファイル領域

Jettyの使い方3、Embedded-Jettyにwarファイルを配備に書いたことだが、Jettyに.warファイルを配備すると、Jettyは一時ファイル領域にそれを展開してから実行する。

この領域としては、通常はOSの一時ファイル領域で、例えばWindowsでのユーザ名がadminだとすると、

C:\Users\admin\AppData\Local\Temp

になる。この下に、

jetty-0.0.0.0-8080-webterm.war-_wt-any-7725045132932423229.dir

といったディレクトリが作成され、さらにその下の

webapp

というディレクトリに.warファイルが展開される。

※もちろん、これは組み込みJettyに限ったことではなく、ごく普通のコンテナとして使用しても同じだろう。

実行ごと、.warファイルごとに別の一時ディレクトリが作成される

厄介なことに、この一時ディレクトリの作られ方は以下になる。

  • Jettyの実行ごとに新たなものが作成される
  • .warファイルごとに別々のものが作成される
  • .warファイルが既に展開済であってもトップの一時ディレクトリは作成される

ことになる。

一時ディレクトリ領域を指定する方法

一時ディレクトリはWebAppContext#setAttribute()メソッドで指定できる。

    WebAppContext war = new WebAppContext();
    war.setContextPath("/");
    war.setWar(......);
    war.setAttribute("org.eclipse.jetty.webapp.basetempdir", "C:\\tmp");

※上の例で”c:\tmp”が存在しない場合には、自動的に作ってはくれない。一時ディレクトリ指定は無視され、デフォルトの一時ディレクトリが使用されてしまう。