Вопрос по asynchronous, spring – Spring MVC как получить ход выполнения асинхронной задачи

7

Я хотел бы запустить асинхронную задачу из контроллера, как в следующем фрагменте кода из документов Spring.

import org.springframework.core.task.TaskExecutor; 

public class TaskExecutorExample { 

  private class MessagePrinterTask implements Runnable { 

    private int cn; 

    public MessagePrinterTask() { 

    } 

    public void run() { 
//dummy code 
for (int i = 0; i < 10; i++) { 
cn = i; 
} 
} 

} 

private TaskExecutor taskExecutor; 

public TaskExecutorExample(TaskExecutor taskExecutor) { 
    this.taskExecutor = taskExecutor; 
  } 

  public void printMessages() { 

      taskExecutor.execute(new MessagePrinterTask()); 

  } 
} 

после этого в другом запросе (в случае, если задача выполняется) мне нужно проверить ход выполнения задачи. В основном получают значение cn.

Что было бы лучшим подходом в Spring MVC, как избежать проблем с синхронизацией?

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Ваш Ответ

3   ответа
2

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded@AsyncError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded Josef Procházka
0

Error: User Rate Limit Exceeded

  private class MessagePrinterTask implements Runnable { 
    private int cn; 

    public int getCN() {
      return cn;
    }

    ...
  }


  public class TaskExecutorExample { 
    MessagePrinterTask printerTask;

    public void printMessages() { 
      printerTask = new MessagePrinterTask();
      taskExecutor.execute(printerTask); 
    }
    ...
  }
Error: User Rate Limit Exceeded
14

Error: User Rate Limit Exceeded@AsyncError: User Rate Limit ExceededError: User Rate Limit Exceeded?

Error: User Rate Limit Exceeded

@Service
public class AsyncServiceBean implements ServiceBean {

    private AtomicInteger cn;

    @Async
    public void doSomething() { 
        // triggers the async task, which updates the cn status accordingly
    }

    public Integer getCn() {
        return cn.get();
    }
}

Error: User Rate Limit Exceeded

@Controller
public class YourController {

    private final ServiceBean bean;

    @Autowired
    YourController(ServiceBean bean) {
        this.bean = bean;
    }

    @RequestMapping(value = "/trigger")
    void triggerAsyncJob() {
        bean.doSomething();
    }

    @RequestMapping(value = "/status")
    @ResponseBody
    Map<String, Integer> fetchStatus() {
        return Collections.singletonMap("cn", bean.getCn());
    }        
}

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

<task:annotation-driven executor="myExecutor"/>
<task:executor id="myExecutor" pool-size="5"/>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Josef Procházka
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded@Autowired, @InjectError: User Rate Limit Exceeded

Похожие вопросы