Quartz动态参数传递

Quartz动态参数传递

参数传递

JobBuild创建jobDetail的时候,用setMapDate的方式,传递参数
然后可以再job类的描述,jobcontext中获得jobMapDate。

动态参数

思考?为什么普通的job中,运行的时候,数据是不变的?

因为触发器触动后,创建的是一个新的job实例,两个实例初始化的时候,并不会有参数共享的问题,
因为他们会自动重新初始化参数。

怎么动态设置?

很简单,防止内存中多个实例,防止同时修改,出现资源争夺,
二,进行参数共享设置。所以有以下两个注解

  • @PersistJobDataAfterExecution 共享JobData在执行后
  • @DisallowConcurrentExecution 不允许并发

简单Demo代码

package quartz.two;

import org.quartz.*;

/**
 * @program: MybatisStudy
 * @description: 普通job
 * @author: cuteDog
 * @create: 2019-03-10 22:57
 **/
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class NormalJob implements Job {
    public NormalJob() {
    }

    public String page;
    public String ceshi;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        dosay();
        JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
        dataMap.put("page",page);
        dataMap.put("ceshi",ceshi);
    }
    public void dosay(){
    System.out.println("page:"+page);
    System.out.println("ceshi:"+ceshi);
        Integer pageInt = Integer.parseInt(page);
        Integer ceshiInt=Integer.parseInt(ceshi);
        pageInt++;
        ceshiInt++;
        page=pageInt.toString();
        ceshi=ceshiInt.toString();
        System.out.println(page+"******");
        System.out.println(ceshi+"******");
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public String getCeshi() {
        return ceshi;
    }

    public void setCeshi(String ceshi) {
        this.ceshi = ceshi;
    }
}



package quartz.two;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @program: MybatisStudy
 * @description: 定时任务配置类
 * @author: cuteDog
 * @create: 2019-03-10 23:01
 **/
public class QuartzConfig {
  public static void main(String[] args) throws SchedulerException {
      Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

      JobDetail jobDetail = JobBuilder.newJob(NormalJob.class)
              .withIdentity("创建一个动态改变参数job")
              .withDescription("这是job描述")
              .usingJobData("page", "12")
              .usingJobData("ceshi", "11")
              .build();
      CronTrigger trigger = TriggerBuilder.newTrigger()
              .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
//                      SimpleScheduleBuilder.simpleSchedule()
//                      .withIntervalInMilliseconds(2))
//              .startNow()
//              .usingJobData("page", "12")
//              .usingJobData("ceshi", "11")
              .build();
      scheduler.scheduleJob(jobDetail,trigger);
      scheduler.start();
      //
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值