Quartz JobDataMap

作用

quartz的job是无状态的,每次调度都会实例化一个新的job实例,如果要在记录job的状态,保留上一次调度的结果,就需要用jobdatamap。

使用方法

jobDataMap可以跟jobDetail绑定,也可以跟Trigger绑定

JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("job1", "group1")
                .usingJobData("data", "jobDetail")
                .usingJobData("name", "jobDetail1")
                .build();
Trigger trigger= TriggerBuilder.newTrigger()
                .withIdentity("trigger1","group1")
                .usingJobData("data","trigger")
                .usingJobData("name","trigger1")
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever())
                .build();

在Job中可以通过JobDetail和Trigger获取到对应的JobDataMap

String data = context.getJobDetail().getJobDataMap().getString("data");
System.out.println(data);
String data1 = context.getTrigger().getJobDataMap().getString("data");
System.out.println(data1);

也可以通过Job中的成员变量来获取,这是因为每次调度时,实例化生成Job实例后,还会调用set方法给JobDataMap中key的同名属性赋值。

public class MyJob implements Job {

    private String name;

    public void setName(String name) {
        this.name = name;
    }
        @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println(name);
    }
}

getMergeDataMap获取合并的值,Trigger会覆盖JobDetail中key重名的

String data2 = context.getMergedJobDataMap().getString("data");

最佳实践

  • JobDataMap最好只存基本类型和String,因为如果要用数据库持久化Job,用其他类型容易产生序列化问题
  • 使用getMergeDataMap
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值