2017-07-08 10 views
0

私はいくつかのデータをQuartzジョブデータマップに入れて、Jobクラスを実装するクラスにアクセスしようとしています。しかし、それは私にヌルポインタ例外を与えます。ジョブデータマップにアクセスするコードなしでアプリケーションを実行すると、正常に動作します。QuartzのgetJobDataMapによってヌルポインタ例外が発生する

私はCronトリガを使用してスケジュールされたジョブを実行します。この例では、20秒ごとに実行するように設定しました。

@Bean 
public Trigger simpleJobTrigger(@Qualifier("simpleJobDetail") JobDetail jobDetail) { 

    CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean(); 
    factoryBean.setJobDetail(jobDetail); 
    factoryBean.setStartDelay(0L); 
    factoryBean.setName("test-trigger"); 
    factoryBean.setStartTime(LocalDateTime.now().toDate()); 
    factoryBean.setCronExpression("0/20 * * * * ?"); 
    factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW); 

    try { 
     factoryBean.afterPropertiesSet(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return factoryBean.getObject(); 

} 

以下は私のsimpleJobDetailです。

@Bean 
public JobDetailFactoryBean simpleJobDetail() { 
    JobDetailFactoryBean factoryBean = new JobDetailFactoryBean(); 
    factoryBean.setJobClass(Executor.class); 
    factoryBean.setDurability(true); 
    factoryBean.setName("test-job"); 
    factoryBean.getJobDataMap().put("caller", "James"); 
    return factoryBean; 
} 

これは私のexecuteメソッドです。

public class Executor implements Job { 

    @Autowired 
    ScheduledTaskService scheduledTaskService; 

    @Override 
    public void execute(JobExecutionContext jobExecutionContext) { 

     JobDataMap jobDataMap = null; 
     try { 
      jobDataMap = jobExecutionContext.getTrigger().getJobDataMap(); 
      String caller = jobDataMap.get("caller").toString(); 
      System.out.println("This is called by the user "+caller); 
     } catch (Exception e) { 
      //e.printStackTrace(); 
      System.out.println("UNABLE TO ACCESS THE JOB DATA MAP "+e); 
     } 

     scheduledTaskService.doThePayment(); 

    } 
} 

アプリケーションを実行すると、catch句に指定されたログが出力されます。

JOBデータマップのjava.lang.NullPointerExceptionにアクセスすることができません

なぜ方法はJobDataMapへのアクセスに失敗した実行?設定する必要がある設定やプロパティはありますか?この時点で就職マップが利用できない理由は何ですか? どうすれば解決できますか?

答えて

0

私のコードで問題が見つかりました。 JobDataMapにアクセスすると、私は次のようにアクセスしました。

jobDataMap = jobExecutionContext.getTrigger().getJobDataMap(); 

私の場合は、トリガーからではなく、JobDetailsからアクセスする必要があります。

jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap(); 
関連する問題