Grails 使用控制器的触发器执行Quartz作业

Grails 使用控制器的触发器执行Quartz作业,grails,groovy,quartz-scheduler,Grails,Groovy,Quartz Scheduler,我可以从作业文件夹中的静态触发器运行cron,它将执行,但当我尝试从控制器触发触发器时,它显然失败了……我缺少了什么 错误代码:没有方法的签名:static com.example.taskmenderjob.triggerNow()适用于参数类型:(java.util.LinkedHashMap)值:[[params:[名称:Frank,电子邮件:frank@test.com]]] grails应用程序中的石英作业/jobs/example package com.example cl

我可以从作业文件夹中的静态触发器运行cron,它将执行,但当我尝试从控制器触发触发器时,它显然失败了……我缺少了什么

错误代码:没有方法的签名:static com.example.taskmenderjob.triggerNow()适用于参数类型:(java.util.LinkedHashMap)值:[[params:[名称:Frank,电子邮件:frank@test.com]]]

grails应用程序中的石英作业/jobs/example

  package com.example
  class TaskReminderJob {
     def reminderMailService 
     static triggers = { }

     def execute(context) {
         def email = context.mergedJobDataMap.get('email')
         def name = context.mergedJobDataMap.get('name')
         reminderMailService.remindMail1(name, email)  //send email via service       
     }
  }
调用作业的控制器

package example

class UserController {
    def quartzScheduler 
    ...
    //user is created
    ...                     
    TaskReminderJob.triggerNow([name:"frank",email:"frank@test.com"] )
} 

更正包路径,然后可以使用
triggerNow
方法手动触发作业。如果需要向其传递任何参数,可以如下方式传递:

控制器

package com.example

class UserController {
     def someAction(){
        ...
        TaskReminderJob.triggerNow([id:params.id])
     }
}
工作

package com.example

class TaskReminderJob {
    static triggers = {}

    def execute(context) {
        def id = context.mergedJobDataMap.get('id')
        ...
    }
}

假设这是一个计划作业还是按需作业,如果您想要有一个计划作业,那么您不需要从控制器触发它,您可以将作业设置为在应用程序上启动。为此,请使用cron表达式为作业定义触发器。看看如何安排cron作业。是的,我尝试了一个干净的构建并刷新了依赖项。我还错过了什么?我不确定你做错了什么,但看看我为你创建的这个例子@顺便说一句,我使用的是
1.0-RC9
版本,请检查一下。为什么您首先需要控制器?一系列事件:用户被创建,在用户创建7天后,应该会触发一些作业向他发送邮件,对吗?quartz作业只需每天调用grails服务,检查从今天起7天前是否有创建的用户,如果有,发送邮件。:)@dmahapatro建议的方式就是我实现它的方式。