@Async异步使用及使用中的问题
使用方法:
1.在springboot启动类添加注解:@EnableAsync
eg:
@EnableAsync
@SpringBootApplication
public class AsyncTestApplication {
public static void main(String[] args) {
SpringApplication.run(AsyncTestApplication.class, args);
}
}
2.在需要开启异步的方法上添加@Async注解
@Service
public class TestService {
@Async
public void testMethod(){
//方法的逻辑
}
}
说明:在方法上添加上 @Async该方法异步,在类上添加 @Async则该类中的方法全部异步
遇到的问题:
随着业务层越来越复杂,各个service之间相互引用,导致在方法上添加 @Async报循环依赖的错误: in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean.
解决方法:简单暴力,在有循环依赖的service上再添加上注解:@Lazy
eg:
@Service
public class A{
@Lazy
@Autowird
private B b;
@Async
public void testMethod(){
//方法的逻辑
}
}
@Service
public class B{
@Autowird
private A a;
}