天天看點

JobDataMap 更新_04

第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);
    }
}