Java Quartz调度程序在特定时间运行

7
例如,我想编写一个Java程序,在每天凌晨12点打印“Hello World”,我该如何使用Quartz调度程序来实现这一目标?
Trigger trigger = TriggerUtils.makeDailyTrigger(0, 0);
trigger.setName("trigger1");
trigger.setGroup("group1");

这样做可以吗?我应该把print "hello world"方法放在哪里?

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表达式

3
比提供cron表达式更简单的方法是使用CronScheduleBuilder#dailyAtHourAndMinute(int, int) 方法。只需用CronScheduleBuilder.dailyAtHourAndMinute(0, 0) 替换 CronScheduleBuilder.cronSchedule(exp),它会将小时和分钟转换为相应的cron表达式。 - ssssteffff
如何添加我的方法?不是类。 - marlonpya
@marlonpya,它将执行“execute”方法,因为它是覆盖的。 - Suvrat Dharmadhikari

1
  1. Download quartz Jar Put in lib folder build project
  2. Create Class (Job) from which you want to schedule task

    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. Create Class for schedule your task

    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();
            }
        }
    }
    

0

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

scheduler.scheduleJob(job, trigger);

请参考以下链接,了解逐步详细信息: Quartz 教程


0

你可以为此创建cron表达式。要使用Quartz作业,您需要以下对象:

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

两种类型的触发器

简单触发器,您可以控制作业,可以每分钟或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表达式,请参阅Quartz文档。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接