powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring mvc async task
8 сообщений из 8, страница 1 из 1
Spring mvc async task
    #39022291
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Есть метод контроллера, который запускает выполнение долгой задачи:
Код: java
1.
2.
3.
4.
5.
6.
7.
@RequestMapping(value="/asyncStart", method=RequestMethod.GET)
    @ResponseBody
    public String asyncStart(HttpSession session) {
        Future<Report> report = commonService.longTask();
        session.setAttribute("report", report);
          return "startAsync";
    }


Сервисный метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Async
    public Future<Report> longTask() {
        int count = 0;
        Report report = new Report();
        report.setDescription("Task start!");
        try {
              while(count!=100){
                  count++;
                  Thread.sleep(1000);
                  report.setDescription("Task complete "+count);
              }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return new AsyncResult(report);
    }


Код: java
1.
2.
3.
4.
public class Report {
    private String description;
    ...
    set/get


Теперь я хочу смотреть ход выполнения моей задачи, делаю следующее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@RequestMapping(value = "/asyncResult", method=RequestMethod.GET)
    @ResponseBody
    public String reportStatus(HttpSession session) {
        Future<Report> report = (Future<Report>)session.getAttribute("report");
        try {
        Report result = report.get();
            if(report.isDone()) {
                return "COMPLETE";
            } else {
                return "STILL WORKING: " + result.getDescription();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
            return "---";
    }


Весь процесс естественно "залипает" на строчке report.get();, т.е. по сути я не вижу реальный ход выполнения моей задачи. Как сделать так, чтобы при каждом вызове /asyncResult выводилось: STILL WORKING: Task complete 27 и т.д.
Спасибо
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022311
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

JavaDoc почитать не вариант?
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет того чтобы обновлять прогресс, то в Java Future нужного метода нет. Велосипед надо педалить самому. Прогресс надо передавать через Future, а не через результат работы (Report). В Guava, вроде, есть ListenableFuture
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022323
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНа счет того чтобы обновлять прогресс, то в Java Future нужного метода нет. Велосипед надо педалить самому. Прогресс надо передавать через Future, а не через результат работы (Report). В Guava, вроде, есть ListenableFuture
Спасибо!
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022329
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022336
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulT,

http://stackoverflow.com/questions/10899635/spring-mvc-how-to-get-progress-of-running-async-task
Спасибо. А если в:
Код: java
1.
2.
while(count!=100){
                  count++;


добавить что-то типа:
Код: java
1.
session.setAttribute("count", count);

и после при вызове /asyncResult доставать оттуда этот count и показывать пользователю?
или это тупо? если да, почему?
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022339
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Spring mvc async task
    #39022348
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTили это тупо? если да, почему?
разработчики контейнера вдруг решили, что отныне сам программист будет следить за потокобезопасностью.
Если лень что писать, 1) сохраняй проценты в БД и показывай.
2)Для десктопа синхронизируй с основным потоком ГУИ.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring mvc async task
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]