我有一个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 FINE [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 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal起始ROOT
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设置 部署描述符公共ID为“空”
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 INFO [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
文件夹中没有任何变化,因此,我认为,在最初添加库之后,重新部署不需要任何额外的时间。
如何更改设置,以便可以在几秒钟内重新部署该应用?
或者,当包含如此大量的库时,重新部署时间是不可避免的吗?
答案 0 :(得分:0)
将罐子从添加的库添加到属性:
tomcat.util.scan.StandardJarScanFilter.jarsToSkip
在Tomcat的main.py
文件中(位于catalina.properties
文件夹中)。
有很多问题可以解释此问题,例如:How to fix JSP compiler warning: one JAR was scanned for TLDs yet contained no TLDs?