定时任务
- 有个时间专门处理某个任务
SpringOBoot 自带的定时任务的框架
-
启动类里面 @EnableScheduling开启定时任务,自动扫描
-
定时任务业务类 加注解 @Component被容器扫描
-
定时执行的方法加上相应的注解
-
固定两秒执行一次
@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()); } }
-
异步任务
-
比如 给用户们发邮件和存储用户信息到数据库中同时进行
-
启动类里面使用@EnableAsync注解开启功能,自动扫描
-
定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async
-
定义异步任务类需要获取结果
-
注意点:
要把异步任务封装到类⾥里里⾯面,不能直接写到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; } }
-