Spring 3.x之后,内置@Async注解可以开启异步线程,不需要我们配置线程池或者通过thread或runnable来开启异步线程,这样极大的方便了开发者,下面就@Async的使用做一个简单介绍:
第一步:确定异步方法
package com.demo.baseinfo.impl;
import com.demo.baseinfo.LogManager;
import com.demo.baseinfo.LogService;
import com.demo.common.bean.BaseService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @description: logService实现
* @author: fengze
* @create: 2018
@Service
public class LogServicempl extends BaseService implements LogService {
@Resource
private LogManager logManager;
@Override
@Async
public Boolean insertLog(String record) {
system.out.println("record:"+record);
return hotelLogManager.insertLog(record);
}
}
第二步:开启异步调用功能
<!--在Spring配置文件中加入如下配置-->
<!--异步任务配置,默认executor="asyncExecutor,可以进行配置-->
<task:annotation-driven/>
<!--处理log的线程池配置,可以配置0或多个,由@Async("logExecutor")中value值决定使用那个-->
<task:executor id="logExecutor" pool-size="10" queue-capacity="5" keep-alive="5"/>
<task:executor id="logExecutor2" pool-size="10-30" queue-capacity="8" keep-alive="5"/>
<!--若@Async配置,则使用spring默认的线程池-->
<!--若@Async("logExecutor")配置,则使用配置id="logExecutor"线程池-->
第三步:使用
直接注入类,然后调用有@Async注解的方法即可
@Resource
private LogService logService;
@Test
public void testGetAllAccountList(){
logService.insertLog("test demo");
System.out.println("异步操作");
}