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