2011-09-12 56 views
2

我有以下的石英工作在我的應用程序運行的觸發:石英工作從Config.groovy中

class ScraperJob { 
    def scraperService 

    static triggers = { 
     cron name: 'scraperTrigger', cronExpression: "0 0 * * * ?" // run every minute 
    } 

    def execute(){ 
     try { 
      scraperService.storing() 
      log.info "${new Date()} - Scraping went smoothly." 
     } 
     catch(IOException) { // Connexion problem 
      log.error "${new Date()} - Method: parsing >> Connexion down or interrupted while parsing !" 
     } 
     catch(SAXException) { // Any SAXParser exception 
      log.error "${new Date()} - Method: parsing >> Parser error." 
     } 
     finally { // if not closed, the application crashes when the connexion fails 
      scraperService.slurper.finalize() 
      scraperService.parser.finalize() 
     } 
    } 
} 

我想知道是否有可能從Config.groovy文件中設置的triggers屬性。如果是這樣,你能解釋一下嗎?

回答

5

我不知道這是否會實際工作,因爲我不知道什麼時候石英工作得到配置,但理論上它似乎工作。如果你有不止一份工作,你或許可以看到你如何也能使這種動態變得更加動態。

Config.groovy中

quartz.yourCronJobName="0 0 * * * ?" 

BootStrap.groovy中

import org.codehaus.groovy.grails.commons.ConfigurationHolder as ConfigHolder 
... 
def cronExpression = ConfigHolder.config.yourCronJobName 
ScraperJob.triggers.cronExpression = cronExpression 

好運。讓我知道它是否有幫助。

+0

啊啊,我很感動!就是這樣。比你非常多 –

+0

;) - 沒問題!這是關閉的,所以我很高興它的工作。 –

+0

哦,實際上我認爲它是有效的,因爲我的工作正好是在我告訴他時觸發的,但那是因爲它一直在後臺運行。 我還沒有管理尚未從BootStrap啓動它,但我在它:) –

3

下面是我最終做到了:

Config.groovy中

scraperJob= "0 * * * * ?" 

ScraperJob.groovy

import org.codehaus.groovy.grails.commons.ConfigurationHolder as ConfigHolder 

class ScraperJob { 

    static triggers = { 
     cron cronExpression: ConfigHolder.config.scraperJob // Calling the ScraperJob set in Config.groovy 
    } 
    def execute(){ ... } 
}