第2篇講述了怎樣給job傳遞參數或者随機數,但是,這個随機數不會更新,舉個例子,執行第一次job的時 随機數3 ,執行第2次job,随機數仍然是3,因為執行每一次job都會執行個體化job執行個體對象
JobDataMap更新的使用場景:
舉個例子,執行第一次job的時随機數3 ,間隔5秒,執行第2次job,随機數仍然是3+5-8
使用@PersistJobDataAfterExecution可更新JobDataMap
JobDataMap更新示例
代碼示例:
package com.gblfy;
import com.gblfy.job.MyJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Random;
public class QuartzStart {
public static void main(String[] args) throws SchedulerException {
//建立Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
Random random = new Random();
int count = random.nextInt(10);
//建立JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
//唯一辨別
.withIdentity("jobDetail1", "group1")
//添加參數通過usingJobData方法,傳遞給job
.usingJobData("count",count)
.build();
//建立Trigger
Trigger trigger = TriggerBuilder.newTrigger()
//立即執行
.startNow()
//任務周期
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
//間隔周期 機關s
.withIntervalInSeconds(5)
//一直執行
.repeatForever())
.build();
//把jobDetail和trigger注冊到scheduler中
scheduler.scheduleJob(jobDetail, trigger);
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduler.shutdown();
}
}
package com.gblfy.job;
import lombok.Getter;
import lombok.Setter;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import java.time.LocalTime;
@PersistJobDataAfterExecution
public class MyJob implements Job {
@Getter@Setter
private int count;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LocalTime localTime = LocalTime.now();
count++;
context.getJobDetail().getJobDataMap().put("count",count);
System.out.println(localTime.toString() + "----count的值=" + count);
}
}