Dan*_*jel 41 annotations servlet-3.0 tomcat7
似乎可以通过在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"...
Run Code Online (Sandbox Code Playgroud)
问题是Tomcat在启动时扫描注释,这会显着减慢它的速度.我的时间从25秒减少到5秒.(更多信息:Tomcat和Servlet 3.0 Web配置)
但是,我的代码中有一些注释,例如:
@ManagedBean
@RequestScoped
@Override
...
Run Code Online (Sandbox Code Playgroud)
我很困惑 - 在设置metadata-complete ="true"后我的代码会工作吗?我是否必须删除注释并将所有内容移至web.xml中?
Bal*_*usC 70
导致启动缓慢是因为每个JAR文件中的每个单个类文件/WEB-INF/lib也会扫描Servlet 3.0特定的注释.你显然有很多(大)JAR文件/WEB-INF/lib.
这metadata-complete="true"表示/WEB-INF/lib不需要扫描JAR文件中的Servlet 3.0特定注释,但仍会扫描webapp自己的类.
请注意,您列出了两个JSF注释和一个Java SE注释,而不是任何Servlet 3.0注释.Servlet 3.0注释列在javax.servlet.annotation包中.当JAR文件包含JSF 2.0兼容/META-INF/faces-config.xml文件时,JSF将仅扫描注释.它不会立即扫描每个JAR文件中的每个类.Java SE @Override注释不是运行时注释,而只是编译时辅助.
Iva*_*tov 13
以下是Java Servlet 3.0/3.1规范所说的内容:
Web应用程序部署描述符包含web-app元素 上的元数据完整属性.的元数据的完整属性定义了是否web.xml中描述符是完整的,或者是否由部署过程中使用元数据的其它来源应予以考虑.元数据可能来自web.xml文件,web-fragment.xml 文件,WEB-INF/classes中类文件的注释以及WEB-INF/lib目录中jar文件中类的注释.如果 metadata-complete设置为"true",则部署工具仅检查web.xml文件和必须忽略注释,比如@WebServlet, @WebFilter和@WebListener存在于应用程序的类文件,并且还必须忽略任何网络fragment.xml之封装在一个罐子文件描述符WEB-INF/lib中.如果 未指定metadata-complete属性或将其设置为"false",则部署工具必须检查类文件和web-fragment.xml文件以获取元数据,如前所述.
这就是说并回答你的问题:是的,为了优化Tomcat的启动时间,你需要使用metadata-complete="true"并将每个Servlet或Filter或Listener放入部署描述符中.
| 归档时间: |
|
| 查看次数: |
34176 次 |
| 最近记录: |