У меня есть приложение Grails с некоторыми оптимизациями, требующими значительных вычислительных ресурсов, со временем выполнения ~ 5 минут (возможно, больше). В настоящее время я делаю это в основном потоке запросов, т.е. для возврата запроса требуется 5 минут. Это работает, но, конечно, ужасно с точки зрения удобства использования.
Итак, как лучше всего реализовать это асинхронно? Я предполагаю, что должен быть задействован ThreadPoolExecutor, но как мне запустить и получить к нему доступ? Могу ли я смоделировать его как службу Grails? Или задание (кажется, что они предназначены только для повторяющихся заданий)?
Кроме того, как лучше всего обрабатывать статус работы? Через флаг или, возможно, целый новый класс в БД? Браузер показывает счетчик и продолжает опрос, пока статус не изменится?