首先需要在spring的配置文件当中添加一下内容:
<!-- 定时器的线程池数量大小 -->
<task:scheduler id="scheduler" pool-size="5" />
<!-- 任务线程池的数量大小,core size为5,max size为15,队列容量为5,达到总线程数时抛出异常、不执行 -->
<task:executor id="executor" pool-size="5-15" queue-capacity="5" />
<!-- 设置定时任务注解和executor任务 -->
<task:annotation-driven executor="executor"
scheduler="scheduler" />
第二步:在需要的位置添加@Async注解,如果在方法上面标注@Async注解,则该方法为异步任务,如果在类上标注,则整个类的所有方法都是异步方法。例如如下代码:
@Async
public boolean preview() {
Thread t=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("后台任务");
}
});
t.start();
for(int i=0;i<10;i++) {
try {
t.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return true;
};
前台的代码该例子使用的是ajax提交参数,controller层的处理和普通情况一样就补贴代码了。
$.ajax({
url : '${pageContext.request.contextPath}/customer/preview',
type : 'POST',
dataType:'json',
data : {
id:123
},
contentType : 'application/json',
success : function(data) {
if(data=="success")
alert("success");
else
alert("error");
},
error : function() {
alert("错误");
}
});
点击超链接时触发该ajax方法:
<a href="javascript:void(0);" class="easyui-linkbutton"
iconCls="icon-preview" plain="true" οnclick="previewObject();">预览客户</a>
这样用户在前端页面点击超链接之后,还可以进行其他操作,刷新和切换页面都不影响后台任务正常执行。后台异步任务可以多个一起执行。该例子比较简单,service层使用的简单操作来达到效果,可以在service层进行耗时操作,方便用户的操作体验,而不至于在一个页面卡死很长时间。