Annotations 设置元数据完成后如何处理批注=";“真的”;(哪个解决了Tomcat 7启动缓慢的问题)?

Annotations 设置元数据完成后如何处理批注=";“真的”;(哪个解决了Tomcat 7启动缓慢的问题)?,annotations,tomcat7,servlet-3.0,Annotations,Tomcat7,Servlet 3.0,在web.xml中将“metadata complete”设置为“true”似乎可以解决Tomcat 7启动缓慢的问题,如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app metadata-complete="true" id="WebApp_ID" version="3.0"... 我很困惑-设置元数据complete=“true”后,我的代码还能工作吗?我是否必须删除注释并将所有内容移动到web.xml中 之所以启动

在web.xml中将“metadata complete”设置为“true”似乎可以解决Tomcat 7启动缓慢的问题,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"...

我很困惑-设置元数据complete=“true”后,我的代码还能工作吗?我是否必须删除注释并将所有内容移动到web.xml中

之所以启动缓慢,是因为
/WEB-INF/lib
中每个JAR文件中的每个类文件都会被扫描,以查找Servlet 3.0特定的注释。显然,在
/WEB-INF/lib
中有很多(大)JAR文件

metadata complete=“true”
表示不需要扫描
/WEB-INF/lib
中的JAR文件以查找Servlet 3.0特定的注释,但仍将扫描webapp自己的类

注意,这里列出了两个JSF注释和一个JavaSE注释,而不是任何Servlet3.0注释。Servlet 3.0注释列在包中。只有当JAR文件包含与JSF2.0兼容的
/META-INF/faces config.xml
文件时,JSF才会扫描注释。它不会立即扫描每个JAR文件中的每个类。JavaSE注释不是运行时注释,而是编译时辅助工具

另见:
以下是Java Servlet/规范的内容:

web应用程序部署描述符包含完整的元数据 web app元素上的属性。元数据完成属性 定义web.xml描述符是否完整,或者其他 部署过程使用的元数据源应为 考虑过的。元数据可能来自web.xml文件,web fragment.xml 文件、WEB-INF/classes中类文件的注释和注释 在WEB-INF/lib目录的jar文件中的类上。如果 元数据完成设置为“true”,部署工具仅检查 web.xml文件,并且必须忽略注释,例如@WebServlet@WebFilter@WebListener出现在 并且还必须忽略任何web fragment.xml描述符 打包在WEB-INF/lib中的jar文件中。如果元数据已完成 属性未指定或设置为“false”,即部署工具 必须检查类文件和web fragment.xml文件,以了解 元数据,如前所述


话虽如此,但为了回答您的问题:是的,为了优化Tomcat的启动时间,您需要使用
metadata complete=“true”
并将每个Servlet、过滤器或侦听器放在部署描述符中。

非常感谢–错过了只有JAR文件不会扫描注释的部分(到目前为止,我还认为
metadata complete=“true”
也会影响web应用程序的类)。这将我的启动时间减少了50%,从~110减少到~55。为什么默认情况下是错误的?有没有我可能忽略的副作用?@Danijel这对你有什么影响?@mattblang:JSF工件(自定义)标记/组件库将不再自动注册。在适用的情况下,您需要自己显式注册它们。@mattblang对我来说?BalusC的回答救了我一命!我不记得了,但速度提高非常快。@BalusC我们的应用程序包含大量JAR文件。我如何知道哪些文件需要显式注册如果有的话,是否注册?
@ManagedBean
@RequestScoped
@Override
...