我添加的库越多,StandardContext Processing标准容器启动就花费的时间就越长

时间:2019-06-18 14:15:15

标签: java tomcat netbeans deployment

我有一个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文件夹中没有任何变化,因此,我认为,在最初添加库之后,重新部署不需要任何额外的时间。

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

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

1 个答案:

答案 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?