Spring MVC: Что произойдет, если я начну поток в действии контроллера? - PullRequest
5 голосов
/ 17 сентября 2010

в контроллере Spring MVC Я хотел бы запустить поток, который продолжает работу, пока мой контроллер отправляет ответ.Будет ли это работать с Spring-MVC?

Best Reagrds, Генрих

Ответы [ 2 ]

6 голосов
/ 17 сентября 2010

Да, вы можете запустить новую тему в контроллере.Но лучший способ выполнить асинхронную работу - использовать поддержку весеннего планирования.Вы можете использовать Кварцевые рамки.Это будет управлять вашей работой.

Эта ссылка поможет вам интегрировать это в ваше приложение.

5 голосов
/ 17 сентября 2010

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

Вам нужно убедиться, что поток действительно останавливается в какой-то момент, либо установив для daemon значение true (если все нормально, остановка сервера убивает поток без предупреждения), либо убедитесь, что код в его методе run всегда завершится в какой-то момент.

Вам лучше использовать пул потоков, чем создавать новые потоки, поэтому вы не рискуете исчерпать ресурсы (остановка потоков обычно не является независимыми событиями, если поток зависает, вероятно, следующий тоже будет, поэтому вам нужен способ сократить ваши потери). Методы, помеченные @Async, будут выполняться с использованием исполнителя, который вы можете настроить, как показано в документации Spring .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...