StandardContext Обработка запуска стандартного контейнера занимает больше времени, чем больше библиотек я добавляю - PullRequest
1 голос
/ 18 июня 2019

У меня есть веб-приложение на Java, которое использует Netbeans с Ant и Ivy для управления и Tomcat в качестве сервера. Версия Tomcat: 8.0.43

У меня установлен флажок «Скомпилировать при сохранении», чтобы при каждом изменении кода приложение развертывалось заново.

Итак, я делаю изменение, и затем Netbeans автоматически повторно развертывает приложение, чтобы изменения можно было увидеть в браузере при тестировании.

Это перераспределение занимало 1-3 секунды.

Недавно я добавил большую библиотеку с большим количеством зависимостей в свое приложение ( Apache Tika )

В результате теперь повторное развертывание при тестировании занимает гораздо больше времени (например, 30 секунд).

Могу ли я что-нибудь сделать, чтобы сократить время повторного развертывания до нескольких секунд?

Это (соответствующая часть) распечатывается в журнале при повторном развертывании приложения (я установил для ведения журнала StandardContext значение FINE):

19-Jun-2019 12: 08: 52.996 INFO [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 Каталина: j2eeType = WebModule, имя = // локальный /, J2EEApplication = нет, = нет сервера J2EE

19-Jun-2019 12: 08: 53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.stopВнутренняя остановка полная

19-Jun-2019 12: 08: 53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInterning Starting 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 открытый идентификатор дескриптора развертывания для '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 Starting завершено

19-Jun-2019 12: 09: 12.405 ИНФО [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.reload Завершение перезагрузки с именем [] завершено

Как видите, длительное время ожидания происходит при вызове StandardContext.reload. В частности, между:

Обработка стандартного запуска контейнера

И

Установка открытого идентификатора дескриптора развертывания в 'null'

Это соответствует коду между строками 4325 и 4467 в StandardContext.start() исходном коде.

Но я до сих пор не уверен, что причина в этой части кода.

Дополнительная информация:

  • Файлы jar, от которых зависит мое приложение, находятся в папке libraries.

  • Все jar файлы, загруженные диспетчером зависимостей, хранятся в WEB-INF/lib.

В моей папке libraries ничего не меняется, и поэтому я думаю, что после первоначального добавления библиотеки не должно быть дополнительного времени, необходимого для повторного развертывания.

Как мне изменить настройки, чтобы я мог повторно развернуть приложение через несколько секунд?

Или это время повторного развертывания неизбежно при включении такого большого количества библиотек?

1 Ответ

0 голосов
/ 22 июня 2019

Добавьте файлы jar из добавленной библиотеки в свойство:

tomcat.util.scan.StandardJarScanFilter.jarsToSkip

В файле Tomcat catalina.properties (находится впапка conf).

Существует множество вопросов, объясняющих эту проблему, например: Как исправить предупреждение компилятора JSP: один JAR был отсканирован на предмет TLD, но не содержал TLD?

...