使用控制器的触发器执行Quartz作业 [英] Execute a Quartz Job with a Trigger from a Controller

查看:102
本文介绍了使用控制器的触发器执行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作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆