@Async注解失效的原因主要有两个
1.主启动类没有加@EnableAsync注解
2.异步方法不要和调用异步方法的方法在同一个类中
例如
@RestController
public class AsyncController {
@GetMapping("/index")
public String index(){
doTask();
System.out.println("index");
return "success";
}
@Async
public void doTask(){
int i = 3;
while (true){
i--;
if (i < 0){
return;
}
System.out.println("当前i的值" + i);
try {
Thread.sleep(3500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
如果是这样的话,其异步方法也是会同步执行的
将异步方法单独抽取到一个类中
@Component
public class AsyncTask {
@Async
public void doTask(){
int i = 3;
while (true){
i--;
if (i < 0){
return;
}
System.out.println("当前i的值" + i);
try {
Thread.sleep(3500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@RestController
public class AsyncController {
@Autowired
private AsyncTask asyncTask;
@GetMapping("/index")
public String index(){
asyncTask.doTask();
System.out.println("index");
return "success";
}
}
日志查看
以这种方式@Async注解才不会失效