看起来Tomcat7启动缓慢的问题可以通过在web.xml中将"metadata-complete“设置为"true”来解决,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"...
问题是Tomcat在启动时扫描注释,这会大大减慢它的运行速度。我的时间从25秒缩短到5秒。(更多信息请点击:Tomcat and Servlet 3.0 Web Configuration)
但是,我的代码中有一些注释,例如:
@ManagedBean
@RequestScoped
@Override
...
我很困惑--在我设置了metadata-complete="true“之后,我的代码还能工作吗?我必须删除注释并将所有内容移动到web.xml中吗?
发布于 2012-03-22 10:49:04
导致启动缓慢的原因是,还会扫描/WEB-INF/lib
中每个JAR文件中的每个类文件,以查找Servlet3.0特定的注释。显然,在/WEB-INF/lib
中有很多(大) JAR文件。
metadata-complete="true"
表示不需要在/WEB-INF/lib
中的JAR文件中扫描特定于Servlet3.0的注释,但仍然会扫描webapp自己的类。
请注意,这里列出了两个JSF批注和一个Java SE批注,而不是任何Servlet 3.0批注。Servlet3.0注释列在javax.servlet.annotation
包中。只有当JAR文件包含与JSF2.0兼容的/META-INF/faces-config.xml
文件时,JSF才会扫描注释。它不会立即扫描每个JAR文件中的每个类。Java @Override
批注不是运行时批注,而只是编译时辅助工具。
另请参阅:
发布于 2015-01-31 12:51:26
下面是Java Servlet 3.0 / 3.1规范需要说明的内容:
web应用程序部署描述符在web-
元素上包含一个metadata-complete属性。metadata-complete属性定义web.xml描述符是否完整,或者是否应考虑部署过程使用的其他元数据来源。元数据可能来自WEB文件、web-fragment.xml文件、WEB-INF/classes,中类文件的注释以及WEB-INF/目录中jar文件中类的注释。如果metadata-complete设置为"true",则部署工具仅检查@WebServlet,web.xml文件,并且必须忽略应用程序的类文件中存在的批注,如WEB-INF/lib. @web.xml和,并且还必须忽略打包在jar文件中的任何jar描述符如果未指定metadata-complete属性或将其设置为"false",则部署工具必须检查类文件和web-fragment.xml文件中的元数据,如前所述。
这是为了回答您的问题:是的,为了优化Tomcat的启动时间,您需要使用metadata-complete="true"
,并将每个Servlet、过滤器或侦听器放在您的部署描述符中。
https://stackoverflow.com/questions/9820379
复制相似问题