Logic not to run the Job on particular time frame

时间:2015-06-30 13:25:24

标签: java quartz-scheduler

I want to run certain job every 30 minutes. So far, I have added logic for the same. But, I have validation - It shouldn't run on Sunday from 00:00 to 10:00 CST.

I am stuck on the validation part. Can anyone help?

Below is the code -

package com.quartz;
import java.util.Calendar;

import org.quartz.CronScheduleBuilder;
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 TriggerCron 
{
    public static void main( String[] args ) throws Exception
    {

        Calendar calObj = Calendar.getInstance();


        if (calObj.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
        {
            return;
        }

        // Job Details

        JobDetail job = JobBuilder.newJob(TriggerJob.class)
        .withIdentity("JobName", "group1").build();

        // Simple Trigger

        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("TriggerName", "group1")
                .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                    .withIntervalInMinutes(30).repeatForever())
                .build();

    //Schedule it

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

        }

}

1 个答案:

答案 0 :(得分:0)

if条件应该在TriggerJob中,而不是设置作业的主要方法。

无论如何,这不是正确的设置方式,因为现在调度条件在作业本身。我建议使用多个cron触发器:

  1. 0 0/30 *? * MON-SAT,星期一至星期四每30分钟运行一次
  2. 0 0/30 10-23? * SUN,仅在周日10点开始。不完全确定这是否是正确的表达方式,但可以根据需要进行调整。
  3. 时区可以通过以下方式设置:

    withSchedule(cronSchedule(cronExpression).inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
    
相关问题