Grails的Quartz工作

时间:2012-08-17 17:03:25

标签: grails quartz-scheduler

请考虑以下代码:

class MyJob {  
    def execute() {
        println "Hello at->"+new Date()
    }
}

当我运行此代码时,它开始每分钟运行而不分配任何触发器。我怎么能禁用这个属性?每当我触发时,我都想开始这项工作。

3 个答案:

答案 0 :(得分:2)

如果你想在启动时禁用默认触发器而不是分配触发器,那么你只需要在类中使用空触发器闭包。

class MyJob {
    static triggers = { }

    ...
}

这会将闭包的触发器(无为)分配给作业而不是默认触发器。

答案 1 :(得分:0)

你想要完成的事情有点模糊。如果你想在创建一个触发器时执行它,那么你实际上不需要将它放在一个cron作业中。

但是,如果您想在特定事件后激活此功能。然后你仍然会创建一个触发器,但在执行之前要进行某种检查。实施例

class MyJob {
   static triggers = { .... create the schedule      

   def execute() {
     // instead of create a trigger, you create a temp file that would allow/prevent
     // the execution
     def runIt = new File(runFile.txt)  
     if (runIt.exists()) {
        println "Hello at->"+new Date()
     }
   }
}

答案 2 :(得分:0)

如果我理解你想做什么,你首先要安装quartz config:

grails install-quartz-config

然后禁用自动启动:

quartz {
    autoStartup = false
    jdbcStore = false
}

然后在您的应用程序中dynamically schedule the job

// creates cron trigger;
MyJob.schedule(String cronExpression, Map params?)
//  creates simple trigger: repeats job repeatCount+1 times with delay of repeatInterval milliseconds;
MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?) )

// schedules one job execution to the specific date;
MyJob.schedule(Date scheduleDate, Map params?)

//schedules job's execution with a custom trigger;
MyJob.schedule(Trigger trigger)

// force immediate execution of the job.
MyJob.triggerNow(Map params?)