【问题标题】:Slow Tomcat Webapp start when lots of files in WEB-INF当 WEB-INF 中有大量文件时,Tomcat Webapp 启动缓慢
【发布时间】:2015-07-11 07:17:42
【问题描述】:

我有一个 Web 应用程序,在 WEB-INF 文件夹 (1000s) 下有很多文件。当它启动或重新启动时,即使关闭 Jar 和 TLD 扫描,它也需要很长时间 > 10 秒。 我什至创建了一个自定义的 JarScanner 类,它什么都不做,没有任何区别。

当上下文启动时,Tomcat 中还有什么会扫描该文件夹,我能做些什么吗?

【问题讨论】:

  • 为什么需要 1000 多个文件。这些文件是类吗?如果它们不是类,为什么不能将其放入数据库中。
  • 它们是数据文件(不是类)。这个实例文件是否更容易维护。

标签: java apache tomcat web-applications web-inf


【解决方案1】:

另一种选择是在 webapp 中添加一个名为 DATA 的旧版本,并在 web.xml 中为其添加一个安全约束,例如:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>secure</web-resource-name>
        <url-pattern>/DATA/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>data</role-name>
    </auth-constraint>
</security-constraint>
<security-role>
    <role-name>data</role-name>
</security-role>

请注意,应在 tomcat-users.xml 或用户数据库(如果已设置)中设置适当的用户和角色。

这样,文件夹不会被扫描,并且也可以通过标准访问安全。

【讨论】:

    【解决方案2】:

    如果您将这些文件直接放在 WEB-INF 文件夹中(或仅在一个文件夹中),操作系统可能会花一些时间来理解该文件夹。许多操作系统无法很好地处理单个文件夹中的数千个文件。因此它可能不会扫描任何内容,而只是打开目录。

    您使用的是什么操作系统?您可能还想尝试保留一个压缩的 WAR 文件,而不是“分解”整个 web 应用程序目录?如果我没记错的话,这可以通过在 server.xml 中设置 &lt;Host&gt; 元素的 unpackWARs 属性来完成:

    <Host name="localhost" unpackWARs="false" ...>
    

    另外,尝试将文件分成许多不同的文件夹,或者更好的是,在 webapplication 目录之外。特别是如果它们只是数据文件,将它们远离 tomcat 可能更容易。

    最后,作为对您评论的回复,这可能会告诉您,您已经成功地用启动时间换取了易于维护(因为您声明文件更易于维护)

    【讨论】:

    • 谢谢。我会将它们放在 webapp 文件夹之外。我以前这样做过,但认为它可能会更整洁,然后发现tomcat(尽管我相信是Jasper)扫描整个文件夹结构。
    猜你喜欢
    • 2013-06-20
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多