如何使用 Scala 安排 Quartz 作业
how to schedule a quartz job with scala
我正在尝试在 Scala 中获取最简单的石英作业示例 运行。
configure() 在加载我的模块时执行一次。
lazy val quartz = StdSchedulerFactory.getDefaultScheduler
override def configure() = {
val Job = new Job {
override def execute(jobExecutionContext: JobExecutionContext) = {
println("Event")
}
}
val job = JobBuilder.newJob(Job.getClass)
.withIdentity("Job", "Group")
.build
val trigger: Trigger = TriggerBuilder
.newTrigger
.withIdentity("Trigger", "Group")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build
quartz.start
quartz.scheduleJob(job, trigger)
}
但是,我在运行此代码时收到一条错误消息。
2015-09-29 15:27:05,015 [DefaultQuartzScheduler_QuartzSchedulerThread] ERROR
org.quartz.core.ErrorLogger - An error occured instantiating job to be executed. job= 'Group.Job'
org.quartz.SchedulerException: Problem instantiating class 'com.search.binder.SearchModule$$anon'
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:58) ~[quartz-2.2.1.jar:na]
at org.quartz.simpl.PropertySettingJobFactory.newJob(PropertySettingJobFactory.java:69) ~[quartz-2.2.1.jar:na]
at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127) ~[quartz-2.2.1.jar:na]
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:375) [quartz-2.2.1.jar:na]
Caused by: java.lang.InstantiationException: com.search.binder.SearchModule$$anon
at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_45]
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:56) ~[quartz-2.2.1.jar:na]
... 3 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.search.binder.SearchModule$$anon.<init>()
at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_45]
at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_45]
... 4 common frames omitted
有人在 Scala 中有 "as simple as possible" 石英调度程序 运行 的示例吗?
我认为问题在于 quartz 正在尝试实例化 Job
的新实例,但它找不到它的构造函数,因为 class 您正在通过 Job.getClass
是匿名的class。尝试按如下方式定义它:
class MyJob extends Job {
override def execute(jobExecutionContext: JobExecutionContext) = {
println("Event")
}
}
然后:
val job = JobBuilder.newJob(classOf[MyJob])
.withIdentity("Job", "Group")
.build
我正在尝试在 Scala 中获取最简单的石英作业示例 运行。
configure() 在加载我的模块时执行一次。
lazy val quartz = StdSchedulerFactory.getDefaultScheduler
override def configure() = {
val Job = new Job {
override def execute(jobExecutionContext: JobExecutionContext) = {
println("Event")
}
}
val job = JobBuilder.newJob(Job.getClass)
.withIdentity("Job", "Group")
.build
val trigger: Trigger = TriggerBuilder
.newTrigger
.withIdentity("Trigger", "Group")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build
quartz.start
quartz.scheduleJob(job, trigger)
}
但是,我在运行此代码时收到一条错误消息。
2015-09-29 15:27:05,015 [DefaultQuartzScheduler_QuartzSchedulerThread] ERROR
org.quartz.core.ErrorLogger - An error occured instantiating job to be executed. job= 'Group.Job'
org.quartz.SchedulerException: Problem instantiating class 'com.search.binder.SearchModule$$anon'
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:58) ~[quartz-2.2.1.jar:na]
at org.quartz.simpl.PropertySettingJobFactory.newJob(PropertySettingJobFactory.java:69) ~[quartz-2.2.1.jar:na]
at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127) ~[quartz-2.2.1.jar:na]
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:375) [quartz-2.2.1.jar:na]
Caused by: java.lang.InstantiationException: com.search.binder.SearchModule$$anon
at java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_45]
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:56) ~[quartz-2.2.1.jar:na]
... 3 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.search.binder.SearchModule$$anon.<init>()
at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_45]
at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_45]
... 4 common frames omitted
有人在 Scala 中有 "as simple as possible" 石英调度程序 运行 的示例吗?
我认为问题在于 quartz 正在尝试实例化 Job
的新实例,但它找不到它的构造函数,因为 class 您正在通过 Job.getClass
是匿名的class。尝试按如下方式定义它:
class MyJob extends Job {
override def execute(jobExecutionContext: JobExecutionContext) = {
println("Event")
}
}
然后:
val job = JobBuilder.newJob(classOf[MyJob])
.withIdentity("Job", "Group")
.build