我想實現一個異步任務,並立即返回並在後臺啓動任務的頁面。但是,該頁面將等待後臺任務完成並僅在之後返回。當我訪問/start
時,需要15秒才能加載頁面。我使用的是Spring 3.2.0。我在test-servlet.xml中有一行包含<task:annotation-driven/>
。Spring MVC異步任務同步運行
奇怪的是,即使我用@Async(「this_bean_does_not_exist」)替換@Async(「this_bean_does_not_exist」),應用程序也會做同樣的事情(儘管我期待引用一個不存在的bean的異常)。
public interface AsyncTestService {
void startSlowProcess();
}
@Service
public class AsyncTestServiceImpl implements AsyncTestService {
@Override
@Async
public void startSlowProcess() {
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
@Controller
public class TestController {
@Autowired
AsyncTestService asyncTestService;
@RequestMapping("/start")
@ResponseBody
public String startSlowProcess() {
asyncTestService.startSlowProcess(); // It takes 15s to complete
return "STARTED"; // should return immediately
}
}
我也試過,結果也一樣。 – 2013-03-02 11:20:26
你在測試之前清理過你的項目嗎?你能證實,如果執行者實際上在運行嗎?根據文檔(參見上面的鏈接),需要顯式聲明的執行程序實例才能起作用。 – 2013-03-02 11:33:41
是的!我從我的配置中缺少EnableAsync。謝謝! – 2013-03-02 13:14:22