Настройка Tomcat, чтобы веб-приложение не загружалось автоматически при запуске [дубликат]

У меня есть веб-приложение Java, которое я развертываю с помощью Tomcat, но с этим у меня проблемы.

Проблема в том, что моему веб-приложению приходится взаимодействовать с некоторыми собственными библиотеками (через JNI), и эти библиотеки не так корректно обрабатывают ошибки, поэтому, если я пытаюсь запустить Tomcat, а собственные вызовы терпят неудачу, запуск Tomcat останавливается на полпути и не работает. Начните.

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

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

Я искал в Google и видел указатели на файл context.xml, но мне неясно, могу ли я использовать это для достижения своей цели, поскольку ссылка Tomcat, похоже, не перечисляет какие-либо свойства, которые останавливают автоматическое создание контекста загружается при запуске.

2
задан 6 April 2012 в 22:40
1 ответ

Кристофер рассмотрел технические вопросы: запустите ntpd, укажите его на надежный источник и помните о дрейфе. Я хотел бы добавить пару примечаний:

  • Отметка времени устанавливается вызовом функции syslog () libc. Вот реализация uClibc . Типичный вызов syslog () завершается менее чем за 1 мс. Вот виртуальная машина Ruby, оборачивающая syslog () за 0,15 мс:

    Benchmark.measure {logger.info 'narf'} .real => 0,000149965286254883

  • Хотя системный журнал может подходить для точности до миллисекунд, многие платформы веб-приложений буферизуют журналы, а затем либо периодически сбрасывают буфер, либо выводят все журналы для запроса после завершения запроса. Почти все веб-серверы делают то же самое (так формат общего файла журнала W3C знает передаваемые байты). Влияние заключается в том, что точность в миллисекундах полезна в меньшем количестве ситуаций, чем может показаться.

  • Дрейф часов является обычным явлением для виртуальных машин. Судя по анекдотическим упоминаниям, обычно 3 секунды в день. Запуск ntpdate в качестве ночного задания cron недостаточно.

  • Контекст обычно делает порядок довольно очевидным. Если вы не сталкивались со случаем, когда точность в миллисекундах была единственным способом узнать, какое событие произошло первым, вероятно, это не стоит времени. unpackWARs = "true" autoDeploy = "true" deployOnStartup = "false" xmlValidation = "ложь" xmlNamespaceAware = "ложь" deployIgnore = ". svn">

    Однако с autoDeploy, установленным на "true", tomcat также поддерживает горячее развертывание файлов войны и контекста, которые находятся в appBase или папке conf / localhost / Catalina, поэтому неясно, увидит ли Tomcat существующие war файлы и также развернуть их. Следовательно, может потребоваться также установить autoDeploy = "false". В этом сценарии вам нужно будет использовать инструмент диспетчера Tomcat для развертывания ваших веб-приложений на работающем сервере Tomcat

4
ответ дан 3 December 2019 в 10:12

Теги

Похожие вопросы