10

上下文和设置信息:

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

问题描述 在使用 Spring 的 JavaConfig 来引导 Spring 上下文而不是使用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

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

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

其他一些对我不起作用的解决方案(没有增加启动时间或根本没有正确启动)

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

等等

正确的解决方案也是使用这样jetty-context.xml的,但使用另一种模式。在 Spring 应用程序中,我们需要扫描 Spring jars,如果您有很多依赖项,仅此一项就已经有了巨大的提升。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>

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

希望这对某人有帮助!

于 2014-11-14T10:31:13.323 回答