Quartz - An error occured instantiating job to be executed
1933 ワード
quartzをテストしたとき、このような間違いを報告しました.
ERROR org.quartz.core.ErrorLogger - An error occured instantiating job to be executed. job= 'group.bbb'
なぜならquartzは反射メカニズムを用いてクラスをインスタンス化しているからですが、私はMyJobクラスを内部クラスとして書きましたが、それを暴露することができず、正常にインスタンス化できませんでした.
解決策:MyJobを単独のクラスファイルとして直接書けば良い
public class TestQuartz{
private static SchedulerFactory sf = new StdSchedulerFactory();
@Test
public void test() throws Exception {
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = sf.getScheduler();
JobDetailImpl jobDetail = new JobDetailImpl();
jobDetail.setName("bbb");
jobDetail.setGroup("group");
jobDetail.setDescription("msn");
jobDetail.setJobClass(new MyJob().getClass());
CronTriggerImpl trigger = new CronTriggerImpl();
trigger.setName("aaa");
trigger.setGroup("group1");
trigger.setCronExpression("0/2 * * * * ?"); // 2s
scheduler.scheduleJob(jobDetail, trigger);
if(!scheduler.isShutdown())
scheduler.start();
//scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
}
}
public class MyJob implements Job{
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println(context.getJobDetail().getDescription());
System.out.println(" ....." + System.currentTimeMillis());
}
}
}
通常の印刷は次のとおりです.
msn
タスクを実行...1462489647331
msn
タスクを実行...1462489647333
msn
タスクを実行...1462489648006
msn
タスクを実行...1462489650007
msn
タスクを実行...1462489652002