Поместите @Async в метод сервиса, который вызывает "настоящий" метод сервиса.Таким образом, у вас есть два способа вызвать его, асинхронный и не асинхронный.
Попросите метод контроллера сохранить будущее, возвращенное службой в сеансе, а затем вернуться.Затем, когда клиент опрашивает контроллер (по другому URL / методу), контроллер может получить Future из сеанса и вызвать isDone () для него.