由于扫描导致Jetty启动延迟

时间:2014-11-14 10:31:13

标签: spring spring-security jetty maven-jetty-plugin jetty-9

上下文和设置信息:

  • 带有eclipse jetty插件的Jetty 9
  • Spring 4.1.1.RELEASE with Spring Security 3.2.3
  • Spring Java配置(无web.xml)

问题描述 在使用Spring的JavaConfig来引导Spring上下文而不是使用web.xml的项目中,启动jetty 9非常慢。 Jetty似乎在适当的时间内无所事事。这发生在以下行之后:

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

Jetty确实最终会启动,但与常规的tomcat 7发行版相比,启动需要很长时间。


其他资源

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    
    //implementation
    }

1 个答案:

答案 0 :(得分:19)

这是因为Jetty 9扫描WEB-INF文件夹中的所有Jars以进行注释以启动Web上下文。如果您试图找到解决此问题的方法,您可能已经发现了这一事实。我尝试了几个这样的答案,但从未在它们中找到正确的解决方案。

为了尽可能地消除这种扫描,我们可以定义一种模式,告诉Jetty哪些扫描源和哪些扫描源。这可以通过在maven中设置一些配置,或通过在jetty-context.xml中设置属性来完成。 (如果您使用的是maven插件,则还需要在jetty-context.xml)中设置Jetty的pom.xml

其他一些对我没用的解决方案(要么没有增加启动时间,要么根本没有正确启动)

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

使用此类jetty-context.xml也可以使用其他模式完成正确的解决方案。在Spring应用程序中,我们需要扫描Spring jar,如果你有很多依赖项,那么这一点就已经大大提升了。更好的是,如果您只扫描spring-web罐子。如果您有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>

我们会排除classesWEB-INF文件夹中没有的任何内容,以及任何不包含正则表达式模式的jar文件。

希望这有助于某人!