如果在SpringBoot项目中使用@Async注解一个异步方法,而不起作用的话,可以排查一下方面:
- 启动类上没有使用@EnableAsync注解
必须是启动类,其他类都不行
- 异步方法所在的类没有加入bean
异步方法所在类必须用@Controller/@RestController/@Service/@Componet等注解,加入到Ioc里
- 异步方法和调用方法在同一个类中
当异步方法和调用方法在同一个类中时,是没办法通过Ioc里的bean来执行异步方法的,从而变成同步方法。
如下:
@Service
public class Test{
public void test() {
a();
}
@Async
public void a() {
}
}
这种调用链,异步方法不会生效。
-
bean必须是用@Autowired或者@Resource注入,不能手动new
-
异步方法和调用方法不能用static修饰
-
@Transactional需要用在调用方法上,用在异步方法上不会生效