Spring中的定时任务和异步任务

定时任务
  1. 有个时间专门处理某个任务
SpringOBoot 自带的定时任务的框架
  1. 启动类里面 @EnableScheduling开启定时任务,自动扫描

  2. 定时任务业务类 加注解 @Component被容器扫描

  3. 定时执行的方法加上相应的注解

    • 固定两秒执行一次
      @Scheduled(fixedRate = 2000)

    • 任务执行完毕之后2秒后再次执行
      @Scheduled(fixedDelay = 2000)

    • corn表达式 可以定一个类似闹钟的定时任务

      @Scheduled(cron = “”)

      https://tool.lu/crontab/ cron表达式如何使用

    @Component
    public class VideoOrderTask {
    
    
        //固定两秒执行一次
        //@Scheduled(fixedRate = 2000)
        // 任务执行完毕之后几秒后再次执行
        @Scheduled(fixedDelay = 2000)
        //@Scheduled(cron = "")
        public void sum() {
            System.out.println(LocalDateTime.now());
        }
    }
    
异步任务
  1. 比如 给用户们发邮件和存储用户信息到数据库中同时进行

  2. 启动类里面使用@EnableAsync注解开启功能,自动扫描

  3. 定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async

  4. 定义异步任务类需要获取结果

    • 注意点:
      要把异步任务封装到类⾥里里⾯面,不能直接写到Controller
      增加Future 返回结果 AsyncResult(“task执⾏行行完成”);
      如果需要拿到结果 需要判断全部的 task.isDone()

      // 异步任务的定义
      @Async
      public Future<String> task5() {
              try {
                  Thread.sleep(4000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              System.out.println("task5");
              return new AsyncResult<String>("task5");
      }
      // 获取异步任务的结果
      // 在Cotroller方法中去获取方法
                  if(task4.isDone() && task5.isDone()) {
                      try {
                          String task4Result = task4.get();
                          String task5Result = task5.get();
                          System.out.println(task4Result);
                          System.out.println(task5Result);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      } catch (ExecutionException e) {
                          e.printStackTrace();
                      } finally {
                          break;
                      }
                  }
              
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值