2009-09-28 3 views
3

При запуске Tomcat рекурсивно сканирует каталоги WEB-INF для дескрипторов TLD (Tag Library Descriptor). В результате, если у webapp есть много файлов в этом каталоге, это замедляет процесс запуска. Кто-нибудь знает, есть ли способ в этой ситуации полностью отключить сканирование или, по крайней мере, предоставить фильтр для сужения поиска?Можно ли отключить сканирование taglib в Tomcat?

+0

Есть ли способ, чтобы назначить только конкретные банки, которые вы хотите сканировать? – 2011-11-09 21:36:05

+0

Не то, чтобы я знал. –

ответ

9

Вы можете добавить processTlds атрибутов в контексте

<Context processTlds="false" ... /> 

Однако ваши домены верхнего уровня, определенные в файле JAR не будет работать без сканирования баночки. Вы должны определить все TLD в WEB-INF.

+0

Спасибо! Это хорошо сделал трюк! –

+0

Кажется, это атрибут Tomcat 7. – Zalumon

1

В качестве альтернативы (если вы все еще предпочитаете сканировать некоторые JAR), вы можете добавить новые значения в свойство «tomcat.util.scan.DefaultJarScanner.jarsToSkip» в «{TOMCAT_HOME} /conf/catalina.properties».

+0

Что нового в Tomcat 7, правильно? В моем случае я все еще на Tomcat 6, но для Tomcat 7 пользователей, которые выглядят как хороший вариант. –

+0

Да. Не применимо к Tomcat 6. Свойство появляется в Tomcat 7. –

7

Я был озадачен той же проблемой. Изучая исходный код Tomcat 7.0.40, невозможно избежать сканирования банок, установив «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, а не йо ur .war

5

На 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

Смежные вопросы