2013-09-06 4 views
4

작업 폴더 내에서 정적 트리거로 cron을 실행할 수 있지만 컨트롤러에서 트리거를 실행하려고하면 일반 오류가 발생합니다 ... 내가 뭘 놓치고 있니?컨트롤러에서 트리거가있는 석영 작업 실행

오류 코드 : 메소드의 서명이 없습니다. static com.example.TaskReminderJob.triggerNow()는 인수 유형에 적용 가능합니다. (java.util.LinkedHashMap) values ​​: [params : [name : Frank, email : frank @ test.com]]]

석영 작업은 Grails의-응용 프로그램/작업/예에서

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:"[email protected]"]) 
} 
+2

왜 당신이 첫번째 장소에있는 컨트롤러를 필요? 일련의 이벤트 : 사용자 생성 후 7 일 후에 메일을 보내도록 작업이 시작되어야합니다. 맞습니까? quartz job은 단순히 매일 ** grails 서비스를 호출하여 오늘부터 7 일 전에 생성 된 사용자가 있는지 확인합니다. 그렇다면 메일을 보냅니다. :) – dmahapatro

+1

@dmahapatro가 제안한 방법은 제가 구현 한 방법입니다. –

답변

11

패키지 경로를 수정하면 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') 
     ... 
    } 
} 
+0

예약 된 작업 또는 주문형 작업으로 가정합니다. 예약 된 작업을 원할 경우 컨트롤러에서 트리거하지 않아도 응용 프로그램에서 작업을 시작할 수 있습니다. 이를 위해 cron 표현식을 사용하여 작업에 대한 트리거를 정의하십시오. cron 작업을 예약하는 방법은 [이 링크] (http://grails-plugins.github.io/grails-quartz/guide/scheduling.html)를보십시오. – Alidad

+0

작동해야합니다. 깨끗한 빌드를 시도 했습니까? – Alidad

+0

예 깨끗한 빌드를 시도하고 종속성을 새로 고칩니다. 그 밖의 무엇이 나는 놓칠 수 있었느냐? –

관련 문제