Spring实现Async异步接口

业务场景:
调用耗费时间很长的接口,由于这些类型的接口阻塞时间太久,前端页面会一直卡在这个接口,做不了其他请求。所以需要将接口设计成异步请求方式。同步、异步的概念就不一~细说了。

实现方式

Step1. AppllicationContext.xml配置文件修改,使项目Async功能生效。


<beans xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">

<task:executor id="myexecutor" pool-size="5"  />
<task:annotation-driven executor="myexecutor"/>

Step2. 代码中使用@Async注解

//将需要执行的异步方法,封装到一个方法里面,放入一个单独的class中。
/**
 * Created with IntelliJ IDEA.
 * 异步执行预处理
 * @date 2017-11-21 17:37
 */
@Component
public class DataAysncPreHandleAction {
    @Autowired
    DataPreHandleService dataPreHandleService;
    /**
     * 异步执行西医预处理
     * @param cqMsgVo
     */
    @Async
    public void doAsyncPreHandleXY(CQMsgVo cqMsgVo) {
        /**
         * step1,第一步需要执行的业务
         */
        public void step1(){};

        /**
         * step2第二步需要执行的业务
         */
        public void step2(){};

        /**
         * step3第三步需要执行的业务
         */
        public void step3(){};
        }
    }

这样就生成了一个异步方法,其他地方只要调用这个异步方法,当代码执行到此异步方法时,就会开启一个独立线程去执行,主线程则继续往下执行,不会阻塞主线程。
(注: @Async所修饰的函数不要定义为static类型,这样异步调用不会生效)

待深究…

  • 本文适用于只需要执行异步方法(通常是耗时操作),并不需要在异步方法执行结束后通知主线程,在后端程序开发中,经常会碰到此场景。
  • 移动端、前端开发中的异步方法,通常在子线程的异步方法执行完成后需要通知主线程,(下载,加载大图片)等都是耗时操作,可以设计成异步Aysnc。

你可能感兴趣的:(Spring系列)