2014-01-09 40 views
0

我看遍了整個地方。我通過Timers和Quartz看了一下,但我仍然感到困惑。在特定的時間每週運行一次方法

我有一個巨大的類執行不同的方法。其中的一個方法是一個同步的方法:

public void onSynch() 
    { 
    String environment = validateEnvironment(env2); 
    if (environment == null) return; 
    try 
    { 
     RAT.synchronize(environment); 
     onSelectEnv(); 
    } 
    catch (Exception e) 
    { 
// TODO: tell user, log 
    } 
    } 

我需要能夠創建一個定時器,在一個特定的時間單獨觸發此法每週一次,每週五下午3:00爲例。 我無法創建單獨的類。

我需要能夠將調度程序置於此方法內部,或者在它旁邊創建另一個方法來創建調度程序並運行該同步方法。

+4

爲什麼,如果你使用的是Windows不使用cron,如果你是在Linux或安排的活動? – gipinani

+0

「無法創建單獨的課程」?這是一個荒謬的限制。 mserioli的建議是你最好的選擇,但他們需要的不僅僅是一堂課。他們要求安排一個單獨的應用程序(使用共享代碼)。 – jpmc26

+0

謝謝你們。所以沒有辦法每7天使用Quartz運行這個方法? – user3116665

回答

1

我想建議使用QUARTZSpring Batch作爲調度程序的工作。

請嘗試以下Quartz Example。 參考:CronTrigger TutorialExample

YourJob.java

public class YourJob implements Job { 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
     //here your operation 
    } 
} 

MySchedule.java

public class MySchedule { 
    public void startUp() throws Exception { 
     SchedulerFactory sf = new StdSchedulerFactory(); 
     Scheduler scheduler = sf.getScheduler(); 

     JobDetail yourJob = JobBuilder.newJob(YourJob.class).withIdentity("job1", "group1").build(); 

     /*Run every 30 seconds on Weekdays (Monday through Friday)*/ 
     Trigger trigger_1 = TriggerBuilder.newTrigger() 
       .withIdentity("trigger1", "group1") 
       .withSchedule(CronScheduleBuilder.cronSchedule("0,30 * * ? * MON-FRI")) 
       .build(); 

     /*Run at 10am on the 1st and 15th days of the month*/ 
     Trigger trigger_2 = TriggerBuilder.newTrigger() 
       .withIdentity("trigger2", "group1") 
       .withSchedule(CronScheduleBuilder.cronSchedule("0 0 10am 1,15 * ?")) 
       .build(); 

     /*Run at 3:30PM of every friday f month*/ 
     Trigger trigger_3 = TriggerBuilder.newTrigger() 
       .withIdentity("trigger3", "group1") 
       .withSchedule(CronScheduleBuilder.cronSchedule("0 18 30 ? * 6")) 
       .build(); 

     scheduler.start(); 

     scheduler.scheduleJob(yourJob, trigger_1); 
     scheduler.scheduleJob(yourJob, trigger_2); 
     scheduler.scheduleJob(yourJob, trigger_3); 

    } 
} 
+0

不應該/ *在每個星期五的下午3:30運行*/be:「0 30 15?* 6」? – adinas

相關問題