在一个方法中如果直接调用了本类方法,会导致@Async注解不生效,可以用下面的方式来解决:
第一种,比较麻烦但是很好理解的方式就是将@Async注释的方法移动到另一个类中。
第二种,就是使用@Autowired将本类对象注入进来,同时使用@Lazy注解防止循环注入的情况发生。最后使用注入进来的对象来调用@Async注释的方法就可以了。
@Service
public class CourseService {
@Lazy
@Autowired
CourseService courseService;
public void testMethod() {
// 直接调用本类方法,@Async注解不生效
this.doAsyncMethod();
// 注入本类对象进行调用可以解决这个问题
courseService.doAsyncMethod();
}
@Async
public void doAsyncMethod() {
System.out.println("......");
}
}
类似的@Transactional注解也可以使用这个方式来解决