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