10

コンテキストとセットアップ情報:

  • Eclipse Jetty プラグインを使用した Jetty 9
  • Spring 4.1.1.RELEASE と Spring Security 3.2.3
  • Spring Java 構成 (web.xml なし)

問題の説明 を使用する代わりに、Spring の JavaConfig を使用して Spring コンテキストを起動するプロジェクトでは、jetty 9 の起動が非常に遅くなりますweb.xml。Jetty は、かなりの時間、何もしていないようです。これは、次の行の後に発生します。

INFO:oejs.Server:main: jetty-9.2.3.v20140905

Jetty は最終的に起動しますが、通常の tomcat 7 ディストリビューションと比較して起動に非常に時間がかかります。


その他のリソース

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    
    //implementation
    }
4

1 に答える 1

20

これは、Web コンテキストを開始するために、Jetty 9 が注釈の WEB-INF フォルダー内のすべての Jar をスキャンするという事実によるものです。この問題の解決策を見つけようとしたことがある場合は、おそらくすでにその事実に気付いているでしょう。そのような答えをいくつか試しましたが、その中に正しい解決策は見つかりませんでした。

このようなスキャンを可能な限り排除するために、スキャンするソースとスキャンしないソースを Jetty に伝えるパターンを定義できます。これは、maven で何らかの構成を設定するか、jetty-context.xml. (maven プラグインを使用している場合は、Jettyjetty-context.xmlも に設定する必要がありますpom.xml)

私にとってうまくいかなかった他のいくつかの解決策(起動時間の増加がないか、まったく正しく起動しないかのいずれか)

Jetty 8.1.2 の起動遅延 maven プラグインを使用した jetty8 の起動に時間がかかる

正しい解決策もそのようなものを使用して行われますjetty-context.xmlが、別のパターンを使用します。Spring アプリケーションでは、Spring jar をスキャンする必要があります。多くの依存関係がある場合、これだけですでに大幅なブーストが得られます。spring-web代わりに jarのみをスキャンするとさらに良いでしょう。Spring Security を使用している場合は、それらの jar を含める必要がある場合もあります。

そのため、最大のスピードアップを実現したパターンを次に示します。

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

    <Call name="setAttribute">
        <Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
        <Arg>.*/spring-security[^/]*\.jar$|.*/spring-web[^/]*\.jar$|.*/classes/.*</Arg>
    </Call>

</Configure>

classesのフォルダーにないWEB-INFもの、および指定された正規表現パターンを含まない jar ファイルはすべて除外されます。

これが誰かを助けることを願っています!

于 2014-11-14T10:31:13.323 に答える