上下文和设置信息:
问题描述
在使用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
}
答案 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>
我们会排除classes
中WEB-INF
文件夹中没有的任何内容,以及任何不包含正则表达式模式的jar文件。
希望这有助于某人!