Quartz给任务方法传递参数
温馨提示:
本文最后更新于 2023年02月15日,已超过 675 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1.需求场景
在我们使用Quartz作为作业调度框架时,部分场景下需要给具体任务类传递参数,比如id,姓名等。
2. 解决方案
2.1 声明作业的时候携带参数
Class extends Job> jobClass = (Class extends Job>) (Class.forName(task.getJobClass()).newInstance()
.getClass());
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(task.getJobName(), task.getJobGroup())// 任务名称和组构成任务key
.build();
//携带参数
jobDetail.getJobDataMap().put("id","123456");
jobDetail.getJobDataMap().put("name","www.365codemall.com");
在任务方法中获取参数
@DisallowConcurrentExecution //作业不并发
@Component
public class HelloWorldJob1 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String id = jobExecutionContext.getJobDetail().getJobDataMap().getString("id");
String name = jobExecutionContext.getJobDetail().getJobDataMap().getString("name");
System.out.println(id);
System.out.println(name);
}
}
2.2 声明作业的时候携带参数
// 定义调度触发规则
// 使用cornTrigger规则
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(task.getJobName(), task.getJobGroup())// 触发器key
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND))
.withSchedule(CronScheduleBuilder.cronSchedule(task.getCronExpression())).startNow().build();
//策略中携带参数
trigger.getJobDataMap().put("id","789");
trigger.getJobDataMap().put("name","www.365codemall.com");
在任务方法中获取参数
@DisallowConcurrentExecution //作业不并发
@Component
public class HelloWorldJob1 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String id = jobExecutionContext.getTrigger().getJobDataMap().getString("id");
String name = jobExecutionContext.getTrigger().getJobDataMap().getString("name");
System.out.println(id);
System.out.println(name);
}
}
2.3 使用MergedJobDataMap
通过JobDetail 或者 Trigger 携带的参数,也可以通过 MergedJobDataMap获取
@DisallowConcurrentExecution //作业不并发
@Component
public class HelloWorldJob1 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String id = jobExecutionContext.getMergedJobDataMap().getString("id");
String name = jobExecutionContext.getMergedJobDataMap().getString("name");
System.out.println(id);
System.out.println(name);
}
}
如果JobDetail 和 Trigger 携带了相同key值得参数,MergedJobDataMap会优先获取Trigger携带的参数
正文到此结束
- 本文标签: Java
- 本文链接: http://www.365codemall.com/article/45
- 版权声明: 本文由李俊杰原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权