大家好,我是苏三,又跟大家见面了。
前言
最近有粉丝问了我一个问题:他在项目某个方法使用@Async
注解,但是该方法还是同步
执行了,异步
不起作用,到底是什么原因呢?
伪代码如下:
@Slf4j
@Service
public class UserService {
@Async
public void async(String value) {
log.info("async:" + value);
}
}
这个问题还是比较有意思的,今天这篇文章总结了@Async注解失效的9种场景,希望对你会有所帮助。
1 未使用@EnableAsync注解
在Spring中要开启@Async注解异步的功能,需要在项目的启动类,或者配置类上,使用@EnableAsync
注解。
例如:
@EnableAsync
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableAsync
注解相当于一个开关
,控制是否开启@Async
注解异步的功能,默认是关闭的。
如果在项目的启动类上没使用@EnableAsync注解,则@Async注解异步的功能不生效。
2 内部方法调用
我们在日常开发中,经常需要在一个方法中调用另外一个方法,例如:
@Slf4j
@Service
public class UserService {
public void test() {
async("test");
}
@Async
public void async(String value) {
log.info("async:{}", value);
}
}
这个