我有一个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
中。
我的库文件夹中没有任何变化,因此我认为,在最初添加库
之后,重新部署不需要任何额外的时间。
如何更改我的设置,以便我可以在几秒钟内再次重新部署应用?
或者,当包含如此大量的库时,这种重新部署时间是否不可避免?
将添加的库中的 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(常量