当前位置: 首页 > 知识库问答 >
问题:

标准上下文处理标准容器启动需要的时间越长,我添加的库越多

端木阳荣
2023-03-14

我有一个Java Web应用程序,它使用Netbeans和Ant和Ivy进行管理,Tomcat作为服务器。雄猫版本:8.0.43

我选中了“保存时编译”,以便每次对代码进行更改时,应用程序都会重新部署。

因此,我进行了更改,然后 Netbeans 会自动重新部署应用程序,以便在测试时可以在浏览器中看到更改。

此重新部署过去需要 1-3 秒。

我最近在我的应用程序中添加了一个包含大量依赖项的大型库(Apache Tika)

现在的结果是,在测试时重新部署需要更长的时间(例如:30秒)。

我能做些什么来将重新部署时间缩短到几秒钟?

这是(相关部分)在应用程序重新部署时打印到日志中(我将标准上下文日志记录设置为 FINE):

19-Jun-2019 12:08:52.996 信息 [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.reload 重新加载名称为 [] 的上下文已开始

19-Jun-2019 12:08:53.055 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.listenerStop 发送应用程序停止事件

19-Jun-2019 12:08:53.125 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.stopInternal Processing 标准容器关闭

19-Jun-2019 12:08:53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.resetContext resetContext Catalina:j2eeType=WebModule,name=//localhost/,J2EEApplication=none,J2EEServer=none

19-Jun-2019 12:08:53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.stopInternal Stop Complete

19-Jun-2019 12:08:53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal Start ROOT

19-Jun-2019 12:08:53.627 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal Processing 标准容器启动

19-Jun-2019 12:09:11.856 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.setPublicId 将部署描述符公共 ID 设置为“null”

19-Jun-2019 12:09:12.200 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.listenerStart 配置应用程序事件侦听器

19-Jun-2019 12:09:12.405 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal Start 已完成

19-Jun-2019 12:09:12.405 信息 [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.reload 重新加载名称为 [] 的上下文已完成

如您所见,调用 StandardContext.reload 时会出现较长的等待时间。具体来说,介于:

处理标准容器启动

将部署描述符公共 ID 设置为“null”

这对应于 StandardContext.start() 源代码中第 4325 行和第 4467 行之间的代码。

但我仍然不确定这部分代码的原因是什么。

额外信息:

>

  • 我的应用所依赖的 jar 文件位于文件夹中。

    依赖关系管理器下载的所有 jar 文件都存储在 WEB-INF/lib 中。

    我的库文件夹中没有任何变化,因此我认为,在最初添加之后,重新部署不需要任何额外的时间。

    如何更改我的设置,以便我可以在几秒钟内再次重新部署应用?

    或者,当包含如此大量的库时,这种重新部署时间是否不可避免?

  • 共有1个答案

    冀嘉木
    2023-03-14

    将添加的库中的 jar 添加到属性:

    tomcat.util.scan.StandardJarScanFilter.jarsToSkip

    在Tomcat的catalina.properties文件中(在conf文件夹中找到)。

    有很多问题可以解释这个问题,例如:如何修复JSP编译器警告:一个JAR被扫描为TLD,但不包含TLD?

     类似资料:
    • 问题内容: 我正在使用TensorFlow训练用于医学图像应用的CNN。 由于我没有大量数据,因此我尝试在训练循环中对训练批次进行随机修改,以人为地增加训练数据集。我用其他脚本编写了以下函数,并在我的培训批次中调用它: 该代码很好地适用于对我的图像进行修改。 问题是 : 在我的训练循环的每个迭代(前馈+反向传播)之后,将相同的功能稳定地应用到我的下一个训练批次中,将比上一次稳定地花费5秒。 处理大

    • 内容和上下文 当考虑 Unity 中的光照时,可以非常方便地把光照分成两个概念:内容 和 上下文。内容是指被渲染和照亮的物体,上下文是指存在于场景中的光照,会照亮(影响)物体。 上下文 当照亮一个物体时,重要的是要了解哪些光源正在在影响物体。在你的场景中,通用会有直接光源:那些你可能已经放在场景中的光源对象。还会有非直接光源,例如反射光和反弹光。这些都会影响物体的材质,最终生成摄像机在物体表面上所

    • 这是对OCaml标准库所提供的不同容器的一个粗略的比较。以下的n代表容器中元素的数量。 值得注意的是,大O所代表的是当前实现下的效率,并不为官方文档保证。希望以后这些实现不会 变得更糟糕吧。总之,文档才是理解这些模块最好的来源。当然,你也可以尝试阅读源代码。 Lists: 不可变的单链表 添加一个元素会创建一个新的链表l,从x指向链表tl。tl不会被改变,因此不会被拷贝。 添加一个元素: O(1)

    • Python 标准库(Python Standrad Library)中包含了大量有用的模块,同时也是每个标准的 Python 安装包中的一部分。熟悉 Python 标准库十分重要,因为只要你熟知这些库可以做到什么事,许多问题都能够轻易解决。 我们将探索这个库中的一些常用模块。你能在你的 Python 安装包中附带的文档中的“库概览(Library Reference)” 部分中查找到所有模块的全

    • String string.byte string.char string.dump string.find string.format string.gmatch string.gsub string.len string.lower string.match string.rep string.reverse string.sub string.upper 在st

    • Object 对象 属性描述对象 Array 对象 包装对象 Boolean 对象 Number 对象 String 对象 Math 对象 Date 对象 RegExp 对象 JSON 对象

    • 新的语言特性和近10年来的经验会给标准库中的容器带来啥改进呢?首先,新容器类型:array(大小固定容器),forward_list (单向链表),unordered containers(哈希表,无序容器)。其次,新特性:initializer lists(初始化列表),rvalue references(右值引用),variadic templates(可变参数模板),constexpr(常量