2014-09-01 52 views
0

我在Java中使用Quartz Scheduler來運行cron作業。這是我第一次使用這個框架來運行cron作業,所以我有一些困惑。如何在Java中使用Quartz Scheduler框架來運行cron作業?

我正在關注這個tutorial以更好地理解如何使用Quartz框架。

我每個月都試圖每週運行JobA,所以我開始與基本的例子 -

這裏是我的榜樣,我已經這麼遠。

public class JobA implements Job { 

    @Override 
    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
     System.out.println("Job A is runing"); 

     // print whether it is week or month 
    } 
} 

下面是我CronTriggerExample作業運行該時間表

public class CronTriggerExample { 
    public static void main(String[] args) throws Exception { 

     JobKey jobKeyA = new JobKey("jobA", "group1"); 
     JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA) 
       .build(); 

     Trigger trigger1 = TriggerBuilder 
       .newTrigger() 
       .withIdentity("dummyTriggerName1", "group1") 
       .withSchedule(CronScheduleBuilder.cronSchedule("5 8 * * 6 ?")) 
       .build(); 

     Scheduler scheduler = new StdSchedulerFactory().getScheduler(); 

     scheduler.start(); 
     scheduler.scheduleJob(jobA, trigger1); 
    } 
} 

問題陳述: -

我不知道如何使用上述每週,每月運行職吧碼。在我的情況下,一個星期和一個月,我的cron標籤項是什麼?我不想在晚上8點到凌晨5點之間運行任何工作,並且任何隨機日都很好。

如果JobA每週運行一次,則應打印出one-weekreport_week。但是如果JobA每個月都在運行,那麼它應該輸出one-monthreport_one_month,所以下一個問題是 - 有什麼辦法,我們可以在運行時將參數傳遞給JobA?

+0

您可以參數化你的'Job'使用'JobDataMap':http://www.quartz-scheduler.org/documentation/quartz-2.x/examples/Example4.html – 2016-10-13 12:40:37

回答

3

的cron在石英的7個字段的含義:

second minute hour day month week year 

year字段是可選的。 *意味着每個例如*week字段意味着每週,因此您應該在week字段和month字段都使用*字段。當指定week字段時,請注意 ,不要忘記在day字段中使用?。你要求

我的例子cron項是:

0 0 0 ? * * 

這意味着每週,每月運行作業的00:00:00,請調整它,您的需要。請參考:CronTrigger

我希望它有幫助。

+0

注意:要你寫自己的Cron表達式,看看http://quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/crontrigger – Kraiss 2014-09-02 07:33:24

+0

@Kraiss,很好的參考。 – Daniel 2014-09-02 09:14:02

0
You can pass JobData if required 

JobBuilder.newJob(JobClass.class); 
jobDetail = jobBuilder.usingJobData("Key", "VALUE") 
        .withIdentity(dbname.getSchemaName(), "group1").build(); 


However for your case you need to modify cron expression provided in your cronschedular 

http://www.cronmaker.com/ 

Follow above link to build cron expression