Вывод времени выполнения контроллера/метода в Spring

У меня есть контроллер Spring, к которому в настоящее время обращаются нормально, но я хочу изменить реализацию таким образом, что если задача, которую выполняет контроллер, занимает более определенного времени, например, 10 секунд, тогда контроллер может ответьте "вызывающему" сообщение "ваш запрос обработанным", но если метод возвращается в течение времени, тогда ответ передается вызывающему методу с контроллера, другими словами, я хочу, чтобы асинхронное выполнение по времени выполнялось с контроллера Spring.

NB: Это не точно домен TaskExecutor (по крайней мере, согласно моему пониманию), потому что я не хочу просто сдавать выполнение TaskExecutor и немедленно возвращаться.

Я использую Spring 3.0 и Java 1.5, а контроллеры не имеют представлений, я просто хочу написать вывод напрямую в поток, который ожидает клиент-клиент.

Ответ 1

Ну, он домена TaskExecutor. В контроллере просто оберните свою логику обработки в Callable, отправьте ее в AsyncTaskExecutor и подождите до 10 секунд. Что это!

final Future<ModelAndView> future = asyncTaskExecutor.submit(new Callable<ModelAndView>() {
    @Override
    public ModelAndView call() throws Exception {
        //lengthy computations...
        return new ModelAndView("done");
    }
});
try {
    return future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
    return new ModelAndView("timeout");
}

Конечно, это немного неприятно, особенно когда это происходит более одного раза в одном контроллере. Если это так, вы должны взглянуть на асинхронную поддержку сервлета 3.0 (см. Ниже).

Дальнейшее чтение: