我在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