启动时,Tomcat 会递归地扫描 WEB-INF 目录中的 TLD(标签库描述符)文件。因此,如果一个 webapp 在该目录下有很多文件,它会减慢启动过程。有谁知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围?
4 回答
您可以在上下文中添加 processTlds 属性,
<Context processTlds="false" ... />
但是,如果不扫描 JAR,您在 JAR 文件中定义的 TLD 将无法工作。您必须在 WEB-INF 中定义所有 TLD。
我对同样的问题感到困惑。查看 Tomcat 7.0.40 的源代码,无法通过设置 'processTlds=false' 来避免 jar 扫描,它们仍然会被扫描 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 上,可以通过将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
作为替代方案(如果您仍然喜欢扫描一些 JAR),您可以将新值附加到“{TOMCAT_HOME}/conf/catalina.properties”中的“tomcat.util.scan.DefaultJarScanner.jarsToSkip”属性。