2014-11-14 13 views
9

Kontext und Setup-Informationen:Jetty Startverzögerung aufgrund Scan

  • Jetty 9 mit der Eclipse-Plugin Anlegestelle
  • Frühling 4.1.1.RELEASE mit Spring Security 3.2.3
  • Frühling Java-Konfiguration (kein web.xml)

Problembeschreibung Ab Anlegesteg 9 ist sehr langsam in einem Projekt, in dem Spring's JavaConfig zum Starten des Spring-Kontexts anstelle von web.xml verwendet wird. Jetty scheint während einer gewissen Zeit nichts zu tun. Dies geschieht nach der Zeile:

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

Jetty schließlich beginnt, aber dauert sehr lange bis zu beginnen im Vergleich zu einer regulären tomcat 7 Verteilung.


Zusätzliche Ressourcen

public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {  
    //implementation 
    } 

Antwort

18

Dies ist aufgrund der Tatsache, dass Jetty 9 Scans alle Gläser im WEB-INF-Ordnern für Anmerkungen, um den Web-Kontext zu starten. Wenn Sie versucht haben, eine Lösung für dieses Problem zu finden, haben Sie diese Tatsache wahrscheinlich schon entdeckt. Ich habe mehrere solche Antworten versucht, aber nie die richtige Lösung gefunden.

Um das Scannen so weit wie möglich zu vermeiden, können wir ein Muster definieren, das Jetty mitteilt, welche Quellen gescannt und welche nicht gescannt werden sollen. Dies geschieht, indem entweder eine Konfiguration in maven festgelegt wird oder indem ein Attribut in jetty-context.xml gesetzt wird. (Wenn Sie das Maven Plugin verwenden, müssen Sie Jetty ist gesetzt jetty-context.xml auch in Ihrem pom.xml)

einige andere Lösungen, die nicht für mich gearbeitet haben (entweder keine Zunahme der Startzeit oder keine korrekte Inbetriebnahme überhaupt)

Jetty 8.1.2 startup delay jetty8 with maven plugin takes to long to start

usw.

Die richtige Lösung auch solche jetty-context.xml verwenden, aber mit einem anderen Muster erfolgt. In einer Spring-Anwendung müssen wir die Spring-Jars scannen, und dies allein wird bereits einen großen Schub geben, wenn Sie viele Abhängigkeiten haben. Noch besser ist, wenn Sie nur die spring-web Gläser scannen. Wenn Sie Spring Security verwenden, ist es möglicherweise auch erforderlich, diese Jars einzubeziehen.

Als solches ist das Muster, das mir maximale Beschleunigung gab hier gezeigt:

<?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> 

Wir nichts ausschließen, die nicht in unserem classes Ordner in WEB-INF, sowie alle Gläser, die beinhalten nicht die RegexMuster ist gegeben.

Hoffe das hilft jemandem!

+0

Es gibt auch das 'quickstart'-Modul in Jetty 9.2.x, das den Scan zur Build/Compile-Zeit durchführen kann, wodurch ein" Jetty-Quickstart "erstellt wird.xml' von dem, was es in der WAR-Datei findet, wodurch der Produktionsstart in Sekundenbruchteilen erfolgt. –

+0

Das ist eigentlich ziemlich cool. Ich werde versuchen, ein Beispiel dafür zu finden, wie man das macht, also kann ich es zu dieser Antwort hinzufügen, oder Sie können Ihre eigenen einsenden, wenn Sie eins in einer Antwort haben :). Vielen Dank! – froginvasion

+0

Ich sehe keinen großen Unterschied, egal welche Lösung ich versuchte. –