6

例如,我想编写一个 Java 程序,在每天凌晨 12 点打印“Hello World”,我该如何使用 Quartz 调度程序来实现呢?

Trigger trigger = TriggerUtils.makeDailyTrigger(0, 0);
trigger.setName("trigger1");
trigger.setGroup("group1");

像这样?我应该把 print "hello world" 方法放在哪里?

4

4 回答 4

9

您可以使用表达式来安排作业的执行。例如:

public static class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("Hello World");
    }
}

public static void main(String[] args) throws SchedulerException {
    String exp = "0 0 0 1/1 * ? *";

    SchedulerFactory factory = new StdSchedulerFactory();
    Scheduler scheduler = factory.getScheduler();
    scheduler.start();
    JobDetail job = JobBuilder.newJob(HelloJob.class).build();
    Trigger trigger = TriggerBuilder.newTrigger()
                                    .startNow()
                                    .withSchedule(
                                         CronScheduleBuilder.cronSchedule(exp))
                                    .build();
    scheduler.scheduleJob(job, trigger);
}

有关构建另一个表达式,请参见http://www.cronmaker.com/。例如0 0/1 * 1/1 * ? *每分钟查看输出。另请参阅Cron Expressions

于 2013-10-11T17:07:14.223 回答
1
  1. 下载quartz Jar 放入lib文件夹构建项目
  2. 创建要从中安排任务的类(作业)

    import org.apache.log4j.Logger;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class MyJob implements Job  {
        private Logger log = Logger.getLogger(MyJob.class);
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
    
            log.debug("Hi....");
            System.out.println("Corn Executing.....");
    
        }
    }
    
  3. 创建班级以安排您的任务

    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    public class JobScheduler {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try {
                JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("myjob").build();
    
                Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(30).repeatForever()).build();
    
                SchedulerFactory schFactory = new StdSchedulerFactory();
                Scheduler scheduler = schFactory.getScheduler(); 
                scheduler.start();
                scheduler.scheduleJob(job, trigger);
    
            }catch (SchedulerException e) {
    
                e.printStackTrace();
            }
        }
    }
    
于 2015-11-28T11:01:06.677 回答
0

您必须通过实现 Job 接口并提供执行方法的实现来创建自定义作业。在执行方法中,您可以打印“hello world”。然后你可以像这样安排你的工作

scheduler.scheduleJob(job, trigger);

有关分步详细信息,请参阅此链接: Quartz 教程

于 2013-10-11T16:59:13.730 回答
0

您可以为此创建 cron 表达式。要进行石英工作,您需要拥有以下对象

  1. 工作
  2. 将与作业关联的任务
  3. 最后创建一个触发器并将一个 Job 关联到触发器

两种类型的触发器

简单的触发器,您可以在其中控制作业,您可以每分钟或 10 分钟运行一次,依此类推。你也可以有额外的参数

initial delay - to kick off

repeatcount - no of times the job should be executes, if -1 then job will be executed infinitely

在您的情况下,您可以使用 cron 触发器,因为您想每天上午 12 点运行。

有关更多详细信息和示例程序,请查看以下链接

http://www.mkyong.com/spring/spring-quartz-scheduler-example/

关于石英 cron 表达式,请参阅石英文档

http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger

于 2013-10-11T17:25:00.627 回答