我在Grails 2.1.3中开发应用程序,需要能够动态调度作业。我遇到了Quartz Plugin版本1.0.1中的MyJob.schedule()方法问题。Quartz Plugin - 无方法签名:.schedule()适用于参数类型:(Long,Integer,LinkedHashMap)
目前我有代码调用为出现的工作:
MyJob.schedule((Long)thing.processInterval,-1,[keyName:thing.value])
随着MyJob类看起来像:
package com.a.b.jobs
import com.a.b.thing.ThingsService
class MyJob{
static triggers = {}
def ThingsService
def execute(context) {
def scheduledThing = ThingsService.getInstance(context.mergedJobDataMap.get('keyName'))
//Do things
scheduledThing.dateProcessed = new Date()
}
}
我现在看到的错误是:
时髦。 lang.MissingMethodException:方法没有签名:static com.abjobs.MyJob.schedule()适用于参数类型:(java.lang.Long,java.lang.Integer,java.util.LinkedHashMap)
但根据http://grails-plugins.github.io/grails-quartz/guide/triggers.html这应该是一个可以接受的呼叫。通过this post给出
我按照指导导入包含作业类的软件包,但工作类本身
import com.a.b.jobs.*;
VS
import com.a.b.jobs.MyJob;
但这并没有解决我的问题。
任何指导将不胜感激!
编辑添加单元测试& &服务。
package com.a.b.thing
import spock.lang.Specification
import com.a.b.thing.Thing
@TestFor(JobStartService)
@Mock([Thing])
@TestMixin(grails.test.mixin.support.GrailsUnitTestMixin)
class JobStartServiceSpec extends Specification {
def "test schedule"() {
when:
def myThing = new Thing()
myThing.processInterval = 1
myThing.name = "name"
myThing.save(failOnError:true)
assert Thing.findAll().size() == 1
service.startJobs()
then: "the returned Thing has been processed"
assert myThing.dateProcessed != null
}
}
//service
package com.a.b.thing
import groovy.time.*
import com.a.b.jobs.*;
class JobStartService {
def thingsService
def startJobs(){
Thing.findAll().each{
if(!it.dateProcessed){
MyJob.schedule(((Long)it.processInterval), -1,[keyName:it.value])
}else {
//other stuff
}
}
}
}
你在哪儿该项目的作业类?你什么时候得到这个错误? – dmahapatro
它位于grails-app/jobs/com/a/b/jobs/MyJob.groovy中,并且在使用.schedule()对服务进行单元测试期间出现此错误。 – Blake
你还可以添加单元测试用例吗? – dmahapatro