我在一个grails项目中安装了Quartz Plugin,但是当我编译时,它给了我以下错误:
Error loading plugin manager: startup failed:
C:UsersX.grails1.3.7projectsValpluginsquartz-0.4.2QuartzGrailsPlugin.groovy: 116: You cannot create an instance from the abstract interface 'org.quartz.CronTrigger'.
@ line 116, column 35.
Trigger trigger = new CronTrigger(generateTriggerName(), GTCP.DEFAULT_TRIGGERS_GROUP, jobName, jobGroup, cronExpression)
^
C:UsersX.grails1.3.7projectsValpluginsquartz-0.4.2QuartzGrailsPlugin.groovy: 122: You cannot create an instance from the abstract interface 'org.quartz.SimpleTrigger'.
@ line 122, column 35.
Trigger trigger = new SimpleTrigger(generateTriggerName(), GTCP.DEFAULT_TRIGGERS_GROUP, jobName, jobGroup, new Date(), null, repeatCount, interval)
^
C:UsersX.grails1.3.7projectsValpluginsquartz-0.4.2QuartzGrailsPlugin.groovy: 128: You cannot create an instance from the abstract interface 'org.quartz.SimpleTrigger'.
@ line 128, column 35.
Trigger trigger = new SimpleTrigger(generateTriggerName(), GTCP.DEFAULT_TRIGGERS_GROUP, jobName, jobGroup, scheduleDate, null, 0, 0)
^
C:UsersX.grails1.3.7projectsValpluginsquartz-0.4.2QuartzGrailsPlugin.groovy: 133: You cannot create an instance from the abstract interface 'org.quartz.SimpleTrigger'.
@ line 133, column 35.
Trigger trigger = new SimpleTrigger(generateTriggerName(), GTCP.DEFAULT_TRIGGERS_GROUP, jobName, jobGroup, scheduleDate, null, 0, 0)
^
4 errors
这就是我想要实现的…
class MyJob {
static triggers = {
cron name: 'myTrigger', cronExpression: "0 0 6 * * ?"
}
def group = "MyGroup"
def execute(){
print "Job run!"
}
}
注意:插件版本为0.4.2
我真的无法复制。我创建了一个新项目,并安装了插件,它运行完美。您没有尝试创建MyJob类的实例,对吗?基本上,一旦安装,这个类(作业)就可以运行了。它将根据cronExpression的设置被触发。
以下是我测试您的场景所采取的步骤: 1)创建grails应用程序:2)安装插件:grails create-app testquartz
3)创建一个新作业:
4)编辑MyJob类:grails create job my
class MyJob {
static triggers = {
cron name: 'myTrigger', cronExpression: "* * * * * ?"
}
def group = "MyGroup"
def execute(){
print "Job run!"
}
}
5)运行应用程序:
grails run-app
=>您应该看到文本"Job run"每秒钟打印一次,因为cronExpression每秒钟都会触发一次。在execute()中,您可以放置希望由cron作业执行的代码。我建议创建一个服务,把要运行的代码放在服务中,并在execute()方法中调用它。