天天看點

quartz與springTask的定時任務

定時任務

一、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