步骤

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);
	}


}