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