Spring-boot 中使用异步调用

异步调用

异步方法调用,实际上是一种并发编程的实践,当想要在当前线程中调用一个方法时,希望这个被调用的方法不阻塞当前线程,只需要在这个被调用的方法上使用@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;
    }
}

猜你喜欢

转载自blog.csdn.net/hzwy23/article/details/79933353