Struts2 фоновые процессы - PullRequest
0 голосов
/ 20 мая 2019

Я реализую схему отложенной загрузки файла в Struts2.Я хочу сделать следующее: пользователь загружает X-файлы на сервер, которые автоматически перемещаются в папку, где они обрабатываются по порядку.Обработка файлов занимает от 30 до 60 секунд, и люди обычно загружают более 100 файлов.

Это не мой дизайн, и я обнаружил, что предыдущий парень делал это линейно: если пользователь загружает 100файлы, затем он начинает обрабатывать их один за другим, и когда все они сделаны, он уведомляет пользователя.Окно загрузки занимает около 2 часов, без информации или чего-то подобного.

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

В данный момент я запускаю Struts2 на Tomcat со всем приложением и помещаю файловый процессор в полностью автономную Java-программу, которая работает как служба на хосте.сервер.Это будет проблемой при обновлении общих вещей, таких как объект базы данных, так как они прямо сейчас находятся в разных проектах (хотя это может быть сделано в одном и том же проекте, сгенерировать обе программы и сделать простой установщик, так что это не является серьезной проблемой)

Хотя для конечного пользователя нет никакой разницы, я бы хотел, чтобы он был в том же .war и заставлял Tomcat запускать его в фоновом режиме (я всегда хотел бы иметь все в одном месте, если это возможно иимеет смысл), однако, я не уверен, где разместить его в Struts2, или если они обескуражены им.

Я знаю, что могу разместить его почти везде, где захочу, однако я хочузнать лучшие практики для этого.Я спрашиваю об этом, потому что они всегда говорят, что философия Stuts2 - это «соглашение о конфигурации»

Я видел кое-что о ContextInitialListeners и подобных вещах, однако, кажется, что это всегда моя ответственность передпорождает и поддерживает поток.Есть ли поддерживаемый способ, или просто запустить поток из ServletContextListener это путь?

Я нашел этот ответ с подробным описанием нескольких способов сделать это, это лучшие практики?

Если это так, то решение моей "проблемы"это так же просто, как создание нового потока из нативного ServletContextListener, который я использую для загрузки моих глобальных файлов конфигурации и правил, и он будет жив, пока не будет закрыт методом contextDestroyed.Если это так, есть ли сценарий, когда contextDestroyed не вызывается (я полагаю, что kill -9 на tomcat помешает его запуску, но поток spawner все равно умрет, если это не полноценный процесс), я прав?

...