一个定时任务

建立一个线程池

@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+"毫秒");
   }
}
相关文章
相关标签/搜索