2012-08-28 47 views
5

我開發了一個爬網程序,它以Start URL作爲種子參數進行爬網。如果可能的話,我想讓用戶按照任務計劃這個任務。使用Spring 3進行動態作業調度

目前我使用的是Spring 3.1.2Hibernate。我需要爲用戶提供一個接收cronJob參數的前端,並基於此我想運行爬網程序。是否有可能使用彈簧做到這一點。

我讀了一些關於Quartz的文章,但SO或其他網站上的文章並不完全清楚,或者他們不完整,爲的是完全理解如何在春天實現調度器。

我知道基礎知識,有三個組成部分它

  1. SchedulerFacotry
  2. 觸發
  3. 工作(服務運行)

我希望有人能指導我在正確的方向。

回答

9

石英調度器只是這項工作的正確工具。出於某種原因,幾乎所有的教程都着重於在啓動時定義作業(使用XML) - 而Quartz完全有能力在運行時調度作業。

您可以並且應該利用Spring來啓動Quartz Scheduler,但是您可以直接從代碼中與它進行交互。下面是一個簡單的例子from the documentation

JobDetail job = newJob(SimpleJob.class) 
    .withIdentity("job1", "group1") 
    .build(); 

CronTrigger trigger = newTrigger() 
    .withIdentity("trigger1", "group1") 
    .withSchedule(cronSchedule("0/20 * * * * ?")) 
    .build(); 

scheduler.scheduleJob(job, trigger); 

在這裏定義一個工作(一段Java代碼來運行),觸發(何時運行它,用戶可以提供任何有效的cron表達式),並把它包全部通過安排它。 Spring實例可以注入調度程序實例。 Spring還將處理正常關閉。

+0

感謝您的回覆。但是有可能使用Timer提供的TimerFactoryBean'ScheduledTask'來實現,而不是使用Quartz。在文檔中也提到了這種方法。你有探討過嗎? –

+1

'newJob(...)'實際上是'JobBuilder.newJob(...)'。在上面的例子中,假設靜態方法'newJob(...)'是靜態導入的,因此不需要通過它的類名來引用它。 –

+0

同樣適用於'TriggerBuilder.newTrigger()'和'CronScheduleBuilder.cronSchedule(...)' –