【问题标题】:Schedule a task to run at everyday on a specific time安排任务在每天的特定时间运行
【发布时间】:2015-05-09 18:57:41
【问题描述】:

我正在尝试在每天上午 8 点和下午 12 点在我的 Servlet/JSP 应用程序中执行特定的工作。 Quartz 库似乎很适合这个,所以我尝试使用它。

我使用了以下链接中的教程和示例。

http://www.mkyong.com/java/quartz-2-scheduler-tutorial/

http://www.javacodegeeks.com/2012/07/quartz-2-scheduler-example.html

下面是一个尝试

职位类别

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job
{
    public void execute(JobExecutionContext context)
    throws JobExecutionException {

        System.out.println("Hello Quartz!");    

    }

}

触发器类

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleTriggerExample {
    public static void main(String[] args) throws Exception {



        JobDetail job = JobBuilder.newJob(HelloJob.class)
            .withIdentity("dummyJobName", "group1").build();



        // Trigger the job to run on the next round minute
        Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("dummyTriggerName", "group1")
            .withSchedule(
                SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInSeconds(5).repeatForever())
            .build();

        // schedule it
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);

    }
}

但是,两者都不能满足我的需要。它们不会在特定时间运行。我如何使用 Quarts 在每天上午 8 点和下午 12 点执行工作?

【问题讨论】:

  • 来自quartz-scheduler.org/generated/2.2.1/html/qs-all/#page/…: SimpleTrigger 如果您需要“一次性”执行(在给定的时间只执行一次作业),或者如果您需要触发在给定时间作业,并让它重复 N 次,执行之间有 T 的延迟。 *如果您希望根据类似日历的时间表(例如“每周五中午”或“每月第 10 天 10:15”)触发,CronTrigger 非常有用。
  • @JBNizet: OKKK...有什么例子吗?
  • quartz-scheduler.org/api/2.2.0/org/quartz/… Google 是您的朋友。文档也是如此。我以前从未使用过石英,我花了 3 分钟才找到它。
  • @JBNizet:问题不在于调度程序。应该安排的方式。在 MKYONG 教程中,他给出了一个例子,但似乎是我不熟悉的一种表达方式。
  • 您阅读过我链接到的文档吗?它包含一个使用.withSchedule(dailyAtHourAndMinute(10, 0)) 的示例。你甚至不需要阅读 javadoc 来猜测它的作用。

标签: java servlets scheduled-tasks quartz-scheduler


【解决方案1】:
Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("triggerName","triggerGroup")
           .withSchedule(CronScheduleBuilder.cronSchedule("0 30 12 * * ?")).build(); //schedules a job for 12:30am

    Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("triggerName","triggerGroup")
           .withSchedule(CronScheduleBuilder.cronSchedule("0 0 14 * * ?")).build(); //schedules a job for 2pm

使用此网站获取有关日程安排的重要信息: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html

【讨论】:

    【解决方案2】:

    尝试使用 Cron 创建计划:

        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("triggerName","triggerGroup")
               .withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")).build();
    
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("triggerName","triggerGroup")
               .withSchedule(CronScheduleBuilder.cronSchedule("0 0 8 * * ?")).build();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2016-11-24
      • 2012-09-18
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多