定時任務
一、springTask定時任務
1)建立類,使用注解
@Component
與
@org.springframework.scheduling.annotation.EnableScheduling
打在類上
2)建立執行方法:使用注解
@org.springframework.scheduling.annotation.Scheduled(cron = "0 0 0 * * ?")
(每天晚上12點執行);cron表達式可以線上生成,不會寫也沒有關系;但是注意隻有六位,不支援年
秒 分 時 日 月 周
3)可以使用
@Autowired
注入業務層接口,編寫自己的代碼……
二、quartz定時任務
1)建立類
implements org.quartz.Job
,
@Override
execute方法,可以使用
jobExecutionContext.getScheduler().getContext()
、
jobExecutionContext.getJobDetail().getJobDataMap()
或
jobExecutionContext.getTrigger().getJobDataMap()
來擷取業務代碼所需要的參數,(使用同一對象傳入/擷取參數,如:使用任務執行個體傳入,執行時就需要使用任務執行個體擷取)
2)業務類中建立方法,使用
org.quartz.impl.StdSchedulerFactory.getDefaultScheduler();
擷取預設定時任務對象
3)建立觸發器和任務對象:
//一分鐘後執行
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("觸發器1" , "觸發器分組")
.startAt(new Date(System.currentTimeMillis() + 60 * 1000))
.forJob("任務執行個體1", "任務組")
.build();
JobDetail job = JobBuilder.newJob(QuotationReservedJob.class)
.withIdentity("任務執行個體1", "任務組")
.usingJobData("param1", "param1")
.usingJobData("param2", "param2")
.usingJobData("param3", "param3")
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
4)觸發器與任務執行個體的名稱必須唯一,否則多使用者執行會報異常
5)觸發器中有各種方式去定義如何執行定時任務
6)建立任務執行個體JobBuilder.newJob(Class<? extends org.quartz.Job> clazz),也就是①中建立的類
7)将任務執行個體與觸發器組合定時任務,start方法啟動,shutdown方法終止
8)使用scheduler對象:
- 根據任務名稱和分組,擷取
可以操作已有任務執行個體org.quartz.JobKey jobKey = org.quartz.JobKey.jobKey(jobName, jobGroup);
- 删除
scheduler.deleteJob(JobKey var1);
- 暫停
scheduler.pauseJob(JobKey var1);
- 恢複
scheduler.resumeJob(JobKey var1);
- 運作一次
scheduler.triggerJob(JobKey var1);
9)在實作了Job接口的類中,注入service層接口
https://blog.csdn.net/zhaoqiangbo/article/details/113725486