java Quartz2 cron触发器没有立即触发

标签 java quartz-scheduler crontrigger

当我调用调度程序时,我需要立即执行调度程序,下次它将根据 cron 表达式执行。但这里我的代码仅在 10 分钟后执行,但在运行此类/应用程序时不执行。

QuartzConfigure.java用于注册和调用execute方法:

public class QuartzConfigure {

    public static void main(String args[]) throws Exception {
        // specify the job' s details..
        JobDetail job = JobBuilder.newJob(QuartzSchduleJob.class)
                                  .withIdentity("testJob")
                                  .build();

        //this is specify using chron expression using chrone expression
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("Group2")
            .withSchedule(CronScheduleBuilder.cronSchedule("0 /10 * * * ?"))
            .startNow().build();

        //schedule the job
        SchedulerFactory schFactory = new StdSchedulerFactory();
        Scheduler sch = schFactory.getScheduler();
        sch.start();
        sch.scheduleJob(job, trigger);
    }
}

QuartzSchduleJob.java 用于作业:

public class QuartzSchduleJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {        
         System.out.println("calling jobSchedulling::"+System.currentTimeMillis());     
    }    
}

最佳答案

使用您当前的代码,您的“调度程序”在 sch.start() 之后立即启动,所以我猜您想知道如何在“调度程序”启动时强制触发您的作业。

如果是这样,您无法仅使用 cron 表达式来实现此目的,但我为您提供了两个解决方案。

  1. 如果您希望作业在开始时触发,然后每十分钟触发一次,请考虑使用 SimpleScheduleBuilder。在您的代码中,替换 CronExpressionSchedule :

    Trigger trigger = TriggerBuilder.newTrigger()
                          .withIdentity("trigger1", "Group2")
                          .withSchedule(ScheduleBuilder.simpleSchedule()
                              .withIntervalInMinutes(10)
                              .repeatForever())
                          .startNow()
                          .build();
    
  2. 如果您希望作业在开始时触发,然后根据您的 Cron 表达式进行调度。考虑使用第二个触发器:

    [...]
    Trigger trigger2 = TriggerBuilder.newTrigger()
                           .withIdentity("trigger2", "Group2")
                           .withSchedule(ScheduleBuilder.simpleSchedule())
                           .startNow()
                           .build();
    [...]
    sch.start();
    sch.scheduleJob(job, trigger);
    sch.scheduleJob(job, trigger2);
    

关于java Quartz2 cron触发器没有立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843425/

相关文章:

java - 使用 Jetty 的应用程序在内存和线程突然爆发时获取 OutOfMemoryError

linux - cron执行错误

Java 与 C |将对象作为参数传递

java - 禁用 quartz 日志记录

java - Quartz 调度作业异常

Grails 3 Quartz插件: Job doesn't start

java - Spring Quartz Scheduler - 在其他作业完成后运行作业

php - 如何强制 Cron Job 提前启动?

java - 我需要用证书签署二进制流

java - 如何使符号出现在 Maven 项目的 Netbeans 输出中?