异步调用
异步方法调用,实际上是一种并发编程的实践,当想要在当前线程中调用一个方法时,希望这个被调用的方法不阻塞当前线程,只需要在这个被调用的方法上使用@Async注解,当调用这个被@Async注解的方法时,将会在另一个线程中执行这个被调用的方法。
异步调用使用的注解
- @Async
- @EnableAsync
注解使用方法
@EnableAsync 添加到main方法所在的类上
@Async 用在需要异步调用的方法上
示例代码
1.首先在main方法的类上使用@EnableAsync注解
@EnableAsync
@SpringBootApplication
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
2.在方法中使用@Async注解(HandleLoggerService类)
@Async
public void writeHandleLog(RequestContext context) {
HttpServletRequest request = context.getRequest();
HttpServletResponse response = context.getResponse();
pack(request, response);
}
调用async注解的方法异步执行
@Configuration
public class HandleLoggerFilter extends ZuulFilter {
@Autowired
private HandleLoggerService handleLoggerService;
@Override
public String filterType() {
return FilterConstants.POST_TYPE;
}
@Override
public int filterOrder() {
return 8888;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
// 异步调用,当调用了writeHandleLog方法时,
// 当前线程不会等待这个方法执行完
handleLoggerService.writeHandleLog(ctx);
return null;
}
}