我正在尝试学习如何使用Quartz来调度程序运行。我遇到了一个小问题,它似乎没有响应我的输入。我正在使用下面的代码创建一个简单的示例,它应该将"simple example“打印到屏幕上。但是,一旦我设置了时间并运行了程序,什么也没有发生。我将它设置为运行两分钟,然后等待,但它的行为并不像它应该的那样。我没有收到任何错误或任何东西,它只是什么也没做。如果有任何帮助,我将不胜感激。
package schedulers;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;
public class SimpleExample {
public static void main(String args[]) throws Throwable{
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = newJob(HelloJob.class)
.withIdentity("cronJob", "testJob")
.build();
String startDateStr = "2016-11-01 09:41:00.0";
// String endDateStr = "2013-09-31 00:00:00.0";
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr);
//Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr);
CronTrigger cronTrigger = newTrigger()
.withIdentity("trigger1", "testJob")
.startAt(startDate)
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 * * ?").withMisfireHandlingInstructionDoNothing())
.build();
scheduler.scheduleJob(job, cronTrigger);
scheduler.start();
} }
package schedulers;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* This class defines a quartz job.
* @author
*/
public class HelloJob implements Job{
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Simple Exapmle");
}
}发布于 2016-11-01 22:25:06
计划程序将仅在达到开始时间时启动。这里唯一的问题是你的startdateStr。它可能不是实际的当前日期,并且永远不会到达开始该过程的时间。我试过你的代码,只需将开始日期替换为下面,对我来说工作得很好。
Calendar cal = Calendar.getInstance();
Date startDate = cal.getTime();另外,为了快速得到结果,我将cron改为每5秒一次,即"*/5 * * * * ?"。
下面是我的结果。
2016-11-01 10:20:28 INFO StdSchedulerFactory:1339 - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2016-11-01 10:20:28 INFO StdSchedulerFactory:1343 - Quartz scheduler version: 2.2.1
2016-11-01 10:20:28 INFO QuartzScheduler:575 - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
Simple Exapmle
Simple Exapmle
Simple Exapmle这可能会对你有帮助。
发布于 2016-11-01 23:26:35
我修复了这个问题。似乎问题出在Cron表达式中。一旦我了解了如何更好地构建它们,我就可以让它们在我想要的时候执行。这对我很有帮助
"0 26 11 01 11 ?"https://stackoverflow.com/questions/40361338
复制相似问题