本文介绍了使用控制器的触发器执行Quartz作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以从作业文件夹内的一个静态触发器运行一个cron,它会执行,但是当我尝试从我的控制器触发一个触发器时,它显然失败了......我错过了什么?


$ b 错误代码:方法没有签名:static com.example.TaskReminderJob.triggerNow()适用于参数类型:(java.util.LinkedHashMap)values:[[ params:[name:Frank,email:frank@test.com]]]

在grails-app / jobs / example中的Quartz Job

  package com.example $ b $ 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)//通过服务发送电子邮件
}
}

控制器呼叫作业

 包示例

class UserController {
def quartzScheduler
...
//用户创建
...
TaskRef minderJob.triggerNow([name:frank,email:frank@test.com])
}


triggerNow 方法手动触发你的工作。如果你需要传递任何参数,你可以像这样传递:

  package com.example 

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

工作

  package com。示例

class TaskReminderJob {
static triggers = {}

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


I can run a cron from a static trigger from within the job folder and it will execute, but when I try to fire a trigger from my controller it just plain fails...What am I missing?

ERROR CODE: No signature of method: static com.example.TaskReminderJob.triggerNow() is applicable for argument types: (java.util.LinkedHashMap) values: [[params:[name:Frank, email:frank@test.com]]]

Quartz Job in grails-app/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
     }
  }

CONTROLLER CALLING THE JOB

package example

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

Correct your package path and then you can trigger your job manually using triggerNow method. And if you need to pass any parameter to it you can pass it like this:

package com.example

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

Job

package com.example

class TaskReminderJob {
    static triggers = {}

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

这篇关于使用控制器的触发器执行Quartz作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-29 01:13
查看更多