题
在启动时,Tomcat的递归方式扫描TLD(标签库描述符)文件的WEB-INF目录。其结果是,如果一个Web应用程序有很多该目录下的文件,它会减慢启动过程。没有人知道,如果在这种情况下的方式完全关闭扫描,或至少提供一种过滤器以缩小搜索范围?
解决方案
可以添加processTlds在上下文属性,
<Context processTlds="false" ... />
然而,在JAR文件中定义你的顶级域名不会没有扫描的JAR工作。你必须定义WEB-INF所有顶级域名。
其他提示
余物通过同样的问题感到困惑。寻找到Tomcat 7.0.40的源代码,这是不可能通过设置避免罐扫描“processTlds =假”,它们仍然会被扫描web片段(ContextConfig.processJarsForWebFragments())。
有剩余2种选择:
在TOMCAT_HOME / CONF / catalina.properties设置属性
org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar
更换StandardJarScanner通过自己的实现,例如空单,并从my.war / META-INF / context.xml中引用它:
<Context processTlds="false">
<JarScanner className="org.my.tomcat.NullJarScanner"/>
</Context>
在后一种情况下,你需要确保NullJarScanner类可在Tomcat的lib目录下,而不是你的.war
在Tomcat的8可通过增加与下方观察到WAR文件的配置的META-INF\context.xml
来解决。
无需改变全局Tomcat配置。
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<JarScanner>
<JarScanFilter tldSkip="*.*"/>
</JarScanner>
</Context>
相关的文档可在这里: HTTP:/ /tomcat.apache.org/tomcat-8.0-doc/config/jar-scan-filter.html
作为替代方案(如果你还是喜欢扫描一些JAR文件),你可以附加新值“tomcat.util.scan.DefaultJarScanner.jarsToSkip”在“{} TOMCAT_HOME /conf/catalina.properties”属性。