java quartz scheduler在特定时间运行

时间:2013-10-11 16:41:45

标签: java

例如,我想在每天上午12点编写一个Java程序来打印“Hello World”,如何使用Quartz调度程序来实现这一目标?

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

喜欢这个?我应该在哪里打印“hello world”方法?

4 个答案:

答案 0 :(得分:7)

您可以使用表达式来安排作业的执行。 e.g:

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

答案 1 :(得分:1)

  1. 下载石英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();
            }
        }
    }
    

答案 2 :(得分:0)

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

scheduler.scheduleJob(job, trigger);

请参阅此链接了解详细信息: Quartz tutorial

答案 3 :(得分:0)

你可以为此创建cron表达式。要有石英工作,你需要有以下的对象

  1. 工作
  2. 将与作业相关联的任务
  3. 最后创建一个触发器并将Job与触发器相关联
  4. 两种类型的触发器

    简单的触发器,你可以控制工作,你可以每分钟或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/

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

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