首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quartz Scheduler无响应

Quartz Scheduler无响应
EN

Stack Overflow用户
提问于 2016-11-01 21:45:02
回答 2查看 79关注 0票数 0

我正在尝试学习如何使用Quartz来调度程序运行。我遇到了一个小问题,它似乎没有响应我的输入。我正在使用下面的代码创建一个简单的示例,它应该将"simple example“打印到屏幕上。但是,一旦我设置了时间并运行了程序,什么也没有发生。我将它设置为运行两分钟,然后等待,但它的行为并不像它应该的那样。我没有收到任何错误或任何东西,它只是什么也没做。如果有任何帮助,我将不胜感激。

代码语言:javascript
复制
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();
    }    

}

代码语言:javascript
复制
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");    
}
}
EN

回答 2

Stack Overflow用户

发布于 2016-11-01 22:25:06

计划程序将仅在达到开始时间时启动。这里唯一的问题是你的startdateStr。它可能不是实际的当前日期,并且永远不会到达开始该过程的时间。我试过你的代码,只需将开始日期替换为下面,对我来说工作得很好。

代码语言:javascript
复制
Calendar cal = Calendar.getInstance();
Date startDate = cal.getTime();

另外,为了快速得到结果,我将cron改为每5秒一次,即"*/5 * * * * ?"

下面是我的结果。

代码语言:javascript
复制
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

这可能会对你有帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-11-01 23:26:35

我修复了这个问题。似乎问题出在Cron表达式中。一旦我了解了如何更好地构建它们,我就可以让它们在我想要的时候执行。这对我很有帮助

代码语言:javascript
复制
"0 26 11 01 11 ?"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40361338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档