如何让quartz在同一时间执行多个同一job
时间: 2024-05-04 08:20:39 浏览: 148
集成在项目中的Quartz-Quartz原理及实例
在Quartz中,同一时间执行多个同一Job的关键在于使用JobDataMap来传递参数,以便在执行Job时区分不同的任务。
具体实现步骤如下:
1. 定义Job类并实现Job接口。
2. 在Job类中通过JobDataMap获取传递的参数。
3. 在JobExecutionContext中获取当前Job的实例。
4. 使用JobExecutionContext调用Job实例的execute方法执行任务。
5. 在Scheduler中添加多个JobDetail实例,每个JobDetail实例对应一个Job任务,并在JobDetail实例中设置JobDataMap传递不同的参数。
6. 使用Trigger为每个JobDetail实例设置触发时间。
这样,当触发时间到达时,Quartz会为每个JobDetail实例创建一个Job实例并执行任务,通过JobDataMap传递的参数来区分不同的任务。
以下是示例代码:
```java
public class MyJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
String jobName = dataMap.getString("jobName");
// 执行任务
System.out.println("执行任务:" + jobName);
}
}
// 创建JobDetail实例并设置JobDataMap
JobDetail jobDetail1 = JobBuilder.newJob(MyJob.class)
.withIdentity("job1", "group1")
.usingJobData("jobName", "任务1")
.build();
JobDetail jobDetail2 = JobBuilder.newJob(MyJob.class)
.withIdentity("job2", "group1")
.usingJobData("jobName", "任务2")
.build();
// 创建Trigger并设置触发时间
Trigger trigger1 = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(30)
.repeatForever())
.build();
Trigger trigger2 = TriggerBuilder.newTrigger()
.withIdentity("trigger2", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(60)
.repeatForever())
.build();
// 将JobDetail和Trigger添加到Scheduler中
scheduler.scheduleJob(jobDetail1, trigger1);
scheduler.scheduleJob(jobDetail2, trigger2);
```
阅读全文