zoukankan      html  css  js  c++  java
  • 日常问题-使用maven jetty插件启动慢的一些解决方法

    背景

    开发工具-idea

    使用maven的jetty插件启动web(spring)项目时,可能会遇到项目启动很慢,甚至可能直接timeout或者报一些其他错误。我们可以根据错误来优化maven中jetty的启动速度。

    常见错误一

    当遇到类似如下错误:

    java.lang.ArrayIndexOutOfBoundsException: 51889
    

    或者:

    java.lang.Exception: Timeout scanning annotations
    

    解决办法

    在web.xml中的web-app标签设置属性metadata-complete=”true”

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0" metadata-complete="true">

    产生原因

    官方原因解释如下:

    One important thing to be aware of is that the 2.5 Servlet Specification has introduced a new attribute into the element, the metadata-complete attribute. If true, then the web container will NOT search the webapp for source code annotations, and your web.xml file must contain all resources required. If false or not specified, then jetty is required to examine all servlets, filters and listeners in the webapp for annotations. Therefore, you can save startup time by using this attribute correctly - if you don’t want to use annotations then ensure you mark metadata-complete=”true”, otherwise you will pay the penalty of the code examination.

    也就是说如果不设置metadata-complete=”true”,那么jetty会检查程序中所有的annotations,而程序中spring和其他的annotations是不需要jetty来检查的。

    常见错误二

    出现如下提示信息:

    [INFO] No Transaction manager found - if your webapp requires one, please configure one.
    

    解决办法

    首先修改pom.xml中jetty插件的配置:

    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.3.0.M1</version>
            <configuration>
                <httpConnector>
                    <port>8888</port>
                </httpConnector>
                <!-- 本地装载contextXml,来解决未配置事务或数据库造成启动时等待时间过长 -->
                <contextXml>src/main/resources/jetty-deploy.xml</contextXml>
            </configuration>
        </plugin>
    </plugins>

    关键是新增了contextXml项的配置,jetty-deploy.xml具体内容如下:

    <?xml version="1.0"?>
    <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
    
    <!-- =============================================================== -->
    <!-- Add a ContextProvider to the deployment manager                 -->
    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <!-- This scans the webapps directory for war files and directories  -->
    <!-- to deploy.                                                      -->
    <!-- This configuration must be used with jetty-deploy.xml, which    -->
    <!-- creates the deployment manager instance                         -->
    <!-- =============================================================== -->
    <Configure id="Server" class="org.eclipse.jetty.webapp.WebAppContext">
        <Call name="setAttribute">
            <Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
            <Arg>.*/mwa-web-.*.jar$</Arg>
            <!--<Arg>.*/.*jsp-api-[^/].jar$|./.*jsp-[^/].jar$|./.*taglibs[^/]*.jar$</Arg>-->
        </Call>
    </Configure>

    产生原因

    项目中未配置事务或数据库造成启动时等待时间过长。

    参考:关于使用maven jetty插件启动慢的解决方法 | Zacard's Notes

  • 相关阅读:
    剑指offer系列——56.删除链表中重复的结点
    剑指offer系列——55.链表中环的入口结点
    剑指offer系列——54.字符流中第一个不重复的字符
    剑指offer系列——53.表示数值的字符串
    MinGW与Cygwin
    Android-x86虚拟机安装配置全攻略
    linux下使用NFS挂载文件系统
    ubuntu 64bit “arm-linux-gcc: No such file or directory”问题的解决方法
    虚拟机下ubuntu的minicom使用指南
    Linux 下编译、安装、配置 QT
  • 原文地址:https://www.cnblogs.com/Oxyy/p/14949074.html
Copyright © 2011-2022 走看看