在启动时,Tomcat递归扫描WEB-INF目录中的TLD(标记库描述符)文件。因此,如果webapp在该目录下有很多文件,则会降低启动过程的速度。有没有人知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围?
答案 0 :(得分:11)
您可以在上下文中添加processTlds属性,
<Context processTlds="false" ... />
但是,如果不扫描JAR,JAR文件中定义的TLD将无法运行。您必须在WEB-INF中定义所有TLD。
答案 1 :(得分:8)
我对同样的问题感到困惑。查看Tomcat 7.0.40的源代码,通过设置'processTlds = false'无法避免jar扫描,仍然会扫描它们的Web片段(ContextConfig.processJarsForWebFragments())。
还有两个选项:
在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
答案 2 :(得分:8)
在Tomcat 8上,可以通过将带有下面配置的META-INF\context.xml
添加到WAR文件中来解决。
无需更改全局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
答案 3 :(得分:1)
作为替代方案(如果您仍然喜欢扫描某些JAR),可以将新值附加到“{TOMCAT_HOME} /conf/catalina.properties”中的“tomcat.util.scan.DefaultJarScanner.jarsToSkip”属性。