Tomcat启动优化 - 扫描TLD文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat启动优化 - 扫描TLD文件相关的知识,希望对你有一定的参考价值。

参考技术A 开发的过程中,每次启动tomcat,日志中总会打印如下的警告。一直以来,都不影响项目的正常运行,所以,都置之不理。但是,昨天,在梳理日志打印内容的时候,我强迫症又犯了,就想对这个问题一探究竟。在网路上,一通搜索猛如虎,查到的答案都是二百五。实在是不能做种优雅的,把这个日志提示的问题解决掉。我就梳理总结一下,我自己的解决过程吧。

通读上面的警告信息,其中包含 TLD 这样一个关键词,我们就从这里入手。然后,顺藤摸瓜,发现这一步是为 JSP标签 功能服务的。我们搜索是从知识上层往下层发现的过程。真正要掌握知识,就需要从底层开始梳理,最后到达上层的应用。我就尝试通过这样一个逻辑来梳理一下。

翻译如下:

Tomcat又是如何参与到JSP的运行中呢?我们查下JSP原理,就可以知道:

JSP页面里包含了JSTL等这样的标签。我查了一圈,也没有看到对JSP标签有一个合理的解释。我理解一下,就是JSP标签就是把通用的、结构化的任务,比如迭代,条件判断,XML文档操作等这些操作抽象为一些标签,方便开发者使用。我们就拿JSTL标签库来举例吧。

Tomcat为了解析这些标签,就要寻找TLD配置文件。寻找这些配置文件,就要像大海捞针一般,去扫描每一个jar包里的内容。在项目依赖日益庞大的情况下,这项扫描工作就变得异常耗时了。
请看原来的启动耗时:

对比一下,优化之后的耗时:

可以说启动性能有了大幅提高,也说明扫描真的很耗时。

好了,说明白了警告信息背后的原理,那么解决起来,应该说就是轻而易举了吧。我们按照警告日志的指示来做:

看完注释,那个心啊,我就想起了康师傅说的一句话:低头走路,也要时不时抬头看看方向。所以,我们完全可以直接配置jarsToScan即可。
写到这里,我在想,上面所有的知识,都是我通过中文互联网找到的二手消息。有没有直接从官网去找一手的,没有被别人咀嚼过的内容呢?我想尝试一下。

这还是我在明确知道,我要找什么内容的情况下,不知道的话,真的是瞎子摸象了。这也是搜索引擎存在的意义了。

部分内容来自于: https://www.cnblogs.com/qqiua/p/9743348.html

关闭Tomcat的TLD扫描功能

  1. Tomcat启动,显示“At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time”

    这是因为Tomcat的TLD自动扫描功能,进入Tomcat目录下的conf/context

     

    <?xml version=‘1.0‘ encoding=‘utf-8‘?>
        <Context processTlds="false">
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
    </Context>

    把Context processTlds设为false就可以了。

以上是关于Tomcat启动优化 - 扫描TLD文件的主要内容,如果未能解决你的问题,请参考以下文章

Azure Tomcat application启动速度优化(20180704)

禁止tomcat扫描jar包的tld文件

如何在 Tomcat 9.0.0M10 中修复“已扫描但未在其中找到 TLD 的 JAR”

Tomca启动脚本遇到的坑

J2EE_Tomca同配置问题解决

Tomca的启动与关闭