步骤
Spring Boot对多线程的支持和Spring没什么区别,就是需要先配置线程池,然后注入bean,再写异步方法,最后调用就可以了。
1. 配置TaskExecutor
public class AsyncTaskConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
// 最小线程数
taskExecutor.setCorePoolSize(5);
// 最大线程数
taskExecutor.setMaxPoolSize(10);
// 等待队列
taskExecutor.setQueueCapacity(25);
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
2. 写一个调用服务类
@Service
public class AsyncTaskService {
private static final Logger logger = LoggerFactory.getLogger(AsyncTaskService.class);
@Value("${wechat.borrow.pushUrl}")
private String borrowPushUrl;
@Async
public void pushBorrow(Borrow borrow) {
//推送借阅订单
String doPost = OkHttpUtil.getInstance().doPost(borrowPushUrl, JSONObject.toJSON(borrow).toString());
ClientResponseJSONBean clientResponseJSONBean = JSONObject.parseObject(doPost, ClientResponseJSONBean.class);
if ("success".equalsIgnoreCase(clientResponseJSONBean.getCode())) {
logger.info("推送成功------> borrow:" + borrow + ",返回结果:" + doPost);
} else {
logger.info("推送失败------> borrow:" + borrow + ",异常信息:" + doPost);
}
}
}
3. 在application中开始异步支持@EnableAsync
@SpringBootApplication
@EnableScheduling
public class HestiaApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(HestiaApplication.class, args);
}
}