0
我在調用頁面時使用異步調用來減少客戶端的一些等待時間。@Async帶註釋的方法在控制器調用時不會異步操作
作爲一個實驗,我有一個控制器,用@Async註解的方法調用pojo。在那個大使館裏,我睡了10000毫秒進行模擬操作,以測試我的理論是否有效,似乎不是。下面的代碼和進一步的信息可以後發現:
測試控制器
@Conroller
public class TestController {
@RequestMapping("/test")
public String testAsyncCall() {
new AsyncTestClass().asyncOpOne();
return "secondpage";
}
}
異步類包含@Async註解的方法
public class AsyncTestClass {
@Async
public void asyncOpOne() {
try {
Thread.sleep(10000);
System.out.println("done working");
} catch (InterruptedException e) {
//
}
}
}
從我的理解
現在客戶端發出呼叫時, 「/測試」在他們的瀏覽器控制器應該返回調用異步方法,並立即返回「第二頁」被渲染。
發生了什麼事是控制器不返回第二頁,直到異步調用中的10000毫秒完成後才返回第二頁。
FYI @EnableAsync被添加到我的一個配置文件(使用Java配置)。
我在這裏做錯了什麼,導致控制器在繼續之前等待異步完成其睡眠?
您沒有使用Spring配置的實例,但正在自己構建一個新的實例...使用由spring配置的實例。 –
@ M.Deinum你能澄清一下,我不明白你的意思嗎 – Aeseir
你正在做'新的AsyncTestClass'這意味着你正在自己構建一個實例,而不是在spring的控制之下,所以基本上你的'@ Async'是沒用的。爲'AsyncTestClass'添加一個bean,並將其注入到控制器中。 –