Я разрабатываю приложение в Grails 2.1.3 и должен иметь возможность динамически планировать работу. У меня возникла проблема с методом MyJob.schedule() из версии Quartz Plugin версии 1.0.1.Кварцевый плагин. Нет подписи метода: .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.*;
работы класс против
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