由于扫描导致Jetty启动延迟

fro*_*ion 10 spring jetty spring-security 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上下文而不是使用a的项目中,启动jetty 9非常慢web.xml.Jetty似乎在适当的时间内无所事事.这发生在以下行之后:

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

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


其他资源

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    
    //implementation
    }
Run Code Online (Sandbox Code Playgroud)

fro*_*ion 19

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

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

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

带有maven插件的Jetty 8.1.2启动延迟jetty8需要很长时间才能启动

等等

使用这种方法也可以使用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>
Run Code Online (Sandbox Code Playgroud)

我们排除了不在我们classes文件夹中的WEB-INF任何内容,以及任何不包含给定的正则表达式模式的jar.

希望这有助于某人!