遇到个很神奇的事情。
用一个group名字做定时任务,任务完成后,把相关的所有东西都删除了,
按理说应该是删除的干干净净,啥都没有了。也检查了,确实什么都没有了。
然后再用相同的group名字和其他的名字一起加入定时任务,正确加入。。
神奇的事情就发生了,到了时间不执行。完全不动
期待高手给解释!
import static org.quartz.CronScheduleBuilder.dailyAtHourAndMinute;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
public class TestMain {
private static final Log log = LogFactory.getLog( TestMain.class );
public static ArrayBlockingQueue<String> tmpQueue = new ArrayBlockingQueue<String>(1);
/**
* @param args
*/
public static void main(String[] args) {
// 创建调度者工厂
SchedulerFactory sfc = new StdSchedulerFactory();
// 通过工厂创建一个调度者
Scheduler scheduler = null;
try {
scheduler = sfc.getScheduler();
scheduler.start();
} catch (SchedulerException e1) {
e1.printStackTrace();
}
int hour = 13;
int min = 57;
int cnt = 2;
for(int i = 0; i < cnt; i++){
min++;
JobDetail myJob = newJob(TestJob.class).withIdentity("123", "456").build();
Trigger trigger = null;
trigger = newTrigger().forJob("123", "456").withIdentity("abc", "efg").
withSchedule(dailyAtHourAndMinute(hour, min)).build();
Date startDate = null;
try {
startDate = scheduler.scheduleJob(myJob, trigger);
log.info("任务运行时间: " + startDate);
tmpQueue.take();
Thread.sleep(5000);
boolean flag = removeJob(scheduler, "456");
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
JobDetail myJob = newJob(TestJob.class).withIdentity("1231", "456").build();
Trigger trigger = null;
trigger = newTrigger().forJob("1231", "456").withIdentity("abc", "efg").
withSchedule(dailyAtHourAndMinute(hour, min)).build();
Date startDate = null;
try {
startDate = scheduler.scheduleJob(myJob, trigger);
log.info("任务运行时间: " + startDate);
tmpQueue.take();
Thread.sleep(5000);
boolean flag = removeJob(scheduler, "4561");
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean removeJob(Scheduler scheduler, String groupName){
try {
GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(groupName);
scheduler.pauseJobs(groupMatcher);
// GroupMatcher<TriggerKey> keyMatcher = GroupMatcher.groupEquals(groupName);
// scheduler.pauseTriggers(keyMatcher);
Set<JobKey> jobKeySet = scheduler.getJobKeys(groupMatcher);
for (JobKey jobKey2 : jobKeySet) {
List<Trigger> triggerList = (List<Trigger>)scheduler.getTriggersOfJob(jobKey2);
for (Trigger trigger : triggerList) {
scheduler.pauseTrigger(trigger.getKey());
boolean unResult = scheduler.unscheduleJob(trigger.getKey());
System.out.println("删除触发器: " + unResult);
}
// boolean result = scheduler.deleteJob(jobKey2);
// System.out.println("删除任务: " + result);
// log.debug(result);
System.out.println("任务是否存在" + scheduler.checkExists(jobKey2));
for (Trigger trigger : triggerList) {
System.out.println("触发器是否存在" + scheduler.checkExists(trigger.getKey()));
}
List<String> groupNameList = scheduler.getJobGroupNames();
for (String string : groupNameList) {
System.out.println(string);
}
scheduler.clear();
}
//处理任务被停止的相关业务逻辑
log.debug("removeSchedule:" + groupName);
return true;
} catch (Exception e) {
log.error("removeSchedule error", e);
}
return false;
}
}
job类 public class TestJob implements Job {
private static final Log log = LogFactory.getLog( TestJob.class );
public void execute(JobExecutionContext arg0) throws JobExecutionException {
log.info("开始执行定时任务....");
TestMain.tmpQueue.add("1");
}
}
用一个group名字做定时任务,任务完成后,把相关的所有东西都删除了,
按理说应该是删除的干干净净,啥都没有了。也检查了,确实什么都没有了。
然后再用相同的group名字和其他的名字一起加入定时任务,正确加入。。
神奇的事情就发生了,到了时间不执行。完全不动
期待高手给解释!
import static org.quartz.CronScheduleBuilder.dailyAtHourAndMinute;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
public class TestMain {
private static final Log log = LogFactory.getLog( TestMain.class );
public static ArrayBlockingQueue<String> tmpQueue = new ArrayBlockingQueue<String>(1);
/**
* @param args
*/
public static void main(String[] args) {
// 创建调度者工厂
SchedulerFactory sfc = new StdSchedulerFactory();
// 通过工厂创建一个调度者
Scheduler scheduler = null;
try {
scheduler = sfc.getScheduler();
scheduler.start();
} catch (SchedulerException e1) {
e1.printStackTrace();
}
int hour = 13;
int min = 57;
int cnt = 2;
for(int i = 0; i < cnt; i++){
min++;
JobDetail myJob = newJob(TestJob.class).withIdentity("123", "456").build();
Trigger trigger = null;
trigger = newTrigger().forJob("123", "456").withIdentity("abc", "efg").
withSchedule(dailyAtHourAndMinute(hour, min)).build();
Date startDate = null;
try {
startDate = scheduler.scheduleJob(myJob, trigger);
log.info("任务运行时间: " + startDate);
tmpQueue.take();
Thread.sleep(5000);
boolean flag = removeJob(scheduler, "456");
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
JobDetail myJob = newJob(TestJob.class).withIdentity("1231", "456").build();
Trigger trigger = null;
trigger = newTrigger().forJob("1231", "456").withIdentity("abc", "efg").
withSchedule(dailyAtHourAndMinute(hour, min)).build();
Date startDate = null;
try {
startDate = scheduler.scheduleJob(myJob, trigger);
log.info("任务运行时间: " + startDate);
tmpQueue.take();
Thread.sleep(5000);
boolean flag = removeJob(scheduler, "4561");
System.out.println(flag);
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean removeJob(Scheduler scheduler, String groupName){
try {
GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(groupName);
scheduler.pauseJobs(groupMatcher);
// GroupMatcher<TriggerKey> keyMatcher = GroupMatcher.groupEquals(groupName);
// scheduler.pauseTriggers(keyMatcher);
Set<JobKey> jobKeySet = scheduler.getJobKeys(groupMatcher);
for (JobKey jobKey2 : jobKeySet) {
List<Trigger> triggerList = (List<Trigger>)scheduler.getTriggersOfJob(jobKey2);
for (Trigger trigger : triggerList) {
scheduler.pauseTrigger(trigger.getKey());
boolean unResult = scheduler.unscheduleJob(trigger.getKey());
System.out.println("删除触发器: " + unResult);
}
// boolean result = scheduler.deleteJob(jobKey2);
// System.out.println("删除任务: " + result);
// log.debug(result);
System.out.println("任务是否存在" + scheduler.checkExists(jobKey2));
for (Trigger trigger : triggerList) {
System.out.println("触发器是否存在" + scheduler.checkExists(trigger.getKey()));
}
List<String> groupNameList = scheduler.getJobGroupNames();
for (String string : groupNameList) {
System.out.println(string);
}
scheduler.clear();
}
//处理任务被停止的相关业务逻辑
log.debug("removeSchedule:" + groupName);
return true;
} catch (Exception e) {
log.error("removeSchedule error", e);
}
return false;
}
}
job类 public class TestJob implements Job {
private static final Log log = LogFactory.getLog( TestJob.class );
public void execute(JobExecutionContext arg0) throws JobExecutionException {
log.info("开始执行定时任务....");
TestMain.tmpQueue.add("1");
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货