当 WEB-INF 中有大量文件时,Webapp 启动缓慢 Tomcat

Slow Tomcat Webapp start when lots of files in WEB-INF

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

Tomcat 中的其他内容会在上下文启动时扫描该文件夹,我可以对此做些什么吗?

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

你在OS什么?您可能还想尝试保留压缩的 WAR 文件而不是 "exploding" 整个 webapplication 目录?如果我没记错的话,这可以通过设置 server.xml 中 <Host> 元素的 unpackWARs 属性来完成:

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

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

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

另一种选择是在 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 或用户数据库(如果已设置)中设置适当的用户和角色。

这样文件夹就不会被扫描,也不会受到标准访问的影响。