При запуске Tomcat рекурсивно сканирует каталоги WEB-INF на наличие файлов TLD (дескриптора библиотеки тегов). В результате, если веб-приложение имеет много файлов в этом каталоге, это замедляет процесс запуска. Кто-нибудь знает, есть ли способ в этой ситуации полностью отключить сканирование или хотя бы предоставить фильтр для сужения поиска?
Можно ли отключить сканирование taglib в Tomcat?
Ответы (4)
Вы можете добавить атрибуты processTlds в контекст,
<Context processTlds="false" ... />
Однако ваши TLD, определенные в файле JAR, не будут работать без сканирования файлов JAR. Вы должны определить все TLD в WEB-INF.
Я был озадачен той же проблемой. Глядя на исходный код Tomcat 7.0.40, невозможно избежать сканирования jar-файлов, установив «processTlds = false», они все равно будут сканироваться на наличие веб-фрагментов (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 доступен в каталоге lib tomcat, а не в вашем .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.util.scan.DefaultJarScanner.jarsToSkip» в «{TOMCAT_HOME}/conf/catalina.properties».