建立一个线程池 @EnableAsync public class AsyOrderConfig implements AsyncConfigurer { @Override @Bean public Executor getAsyncExecutor() { // 获取线程池 – 数据库的链接池 ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); // 设置线程数 threadPoolTaskExecutor.setCorePoolSize(10); // 设置最大链接数 threadPoolTaskExecutor.setMaxPoolSize(100); // 设置等待队列,若是10个不够,能够有100个线程等待 缓冲池 threadPoolTaskExecutor.setQueueCapacity(100); // 初始化操做 threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return null; } /** * 在代码中的方法上能够标记@Async * // 处理未完成订单 * @Async * public void execExpiredOrder(OrderInfo orderInfo){ * // 订单信息 * updateOrderStatus(orderInfo.getId(),ProcessStatus.CLOSED); * // 付款信息 * paymentService.closePayment(orderInfo.getId()); * } */ }
/** * 定时处理过时订单 * */ @EnableScheduling @Component public class OrderTask { @Scheduled(cron = "0/20 * * * * ?") public void checkOrder() { System.out.println("开始处理过时订单"); long starttime = System.currentTimeMillis(); List<OrderInfo> expiredOrderList = orderService.getExpiredOrderList(); for (OrderInfo orderInfo : expiredOrderList) { // 处理未完成订单 orderService.execExpiredOrder(orderInfo); } long costtime = System.currentTimeMillis() - starttime; System.out.println("一共处理"+ " " +"个订单 共消耗"+costtime+"毫秒"); } }