我有一个Java Web应用程序,该Web应用程序将Netbeans与Ant和Ivy一起用于管理,并将Tomcat作为服务器。
Tomcat版本:8.0.43
我选中了“保存时编译”,以便每次更改代码时,应用程序都会重新部署。
因此,我进行了更改,然后Netbeans自动重新部署了该应用程序,以便在测试时可以在浏览器中看到更改。
重新部署通常需要1-3秒。
我最近在我的应用程序(Apache Tika)中添加了一个具有很多依赖项的大型库
现在的结果是,在测试时重新部署需要更长的时间(例如:30秒)。
为了将重新部署时间减少到几秒钟,我能做些什么?
当应用程序重新部署(我将StandardContext日志记录设置为FINE
)时,这(相关部分)被打印到日志中:
2019年6月19日12:08:52.996 INFO [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.reload重载上下文
名称[]已开始
2019年6月19日12:08:53.055精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.listenerStop发送
应用程序停止事件
2019年6月19日12:08:53.125精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.stop内部处理
标准容器关闭
2019年6月19日12:08:53.171精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.resetContext resetContext
Catalina:j2eeType = WebModule,名称= // localhost /,J2EEApplication = none,J2EEServer = none
2019年6月19日12:08:53.171精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.stop内部停止
完成
2019年6月19日12:08:53.171精细[http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal启动根
2019年6月19日12:08:53.627精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.start内部处理
标准容器启动
2019年6月19日12:09:11.856精细[http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.setPublicId设置
部署描述符公共标识为“ null”
2019年6月19日12:09:12.200 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.listener开始配置
应用程序事件监听器
2019年6月19日12:09:12.405精细[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.start内部启动
已完成
2019年6月19日12:09:12.405信息[http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.reload名称为[]的上下文重装完成
如您所见,调用StandardContext.reload
时会出现较长的等待时间。
具体来说,介于:
处理标准容器启动
和
将部署描述符公共ID设置为“空”
这对应于StandardContext.start()
源代码中第4325行和4467行之间的代码。
但是我仍然不确定这部分代码是什么原因。
额外信息:
我的应用程序依赖的jar
文件位于libraries
文件夹中。
依赖项管理器下载的所有jar
文件都存储在WEB-INF/lib
中。
我的libraries
文件夹没有任何变化,因此,我认为,在最初添加库之后,重新部署就不需要任何额外的时间。
如何更改设置,以便可以在几秒钟内重新部署该应用程序?
或者,当包含如此大量的库时,重新部署时间是否不可避免?
最佳答案
将罐子从添加的库添加到属性:
tomcat.util.scan.StandardJarScanFilter.jarsToSkip
在Tomcat的catalina.properties
文件中(在conf
文件夹中找到)。
有很多问题可以解释此问题,例如:How to fix JSP compiler warning: one JAR was scanned for TLDs yet contained no TLDs?