1

Quartz ジョブ スケジューラを使用して、電子メールを自動的に送信しようとしています。これを行うには、jobDataMap を使用して、ジョブを完了するために必要なデータを、cronTrigger が初期化されるクラスからジョブが実行されるクラスに渡します。ただし、jobDataMap を使用して渡す必要があるデータにアクセスしようとすると、常に null が返されます。何がうまくいかないのか誰にも考えがありますか? トリガーを初期化するクラスのコードは次のとおりです。

trigger = new CronTrigger("SendReportEmailsTrigger", "CronTriggerGroup", "0 0/1 * * * ?");
        List < UserDetails> aList = customerDetailsService.getUsersConfiguredForEmailedReports();

        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("service", reportService);
        trigger.setJobDataMap(jobDataMap);

そして、ジョブが実行されるコードは次のとおりです。

public void execute(JobExecutionContext context) throws JobExecutionException {



    JobDataMap dataMap = context.getJobDetail().getJobDataMap();
    logger.debug("map = " + dataMap.entrySet());
    logger.debug("dataMap = " + context.getJobDetail().getJobDataMap());
    for (Object val : dataMap.entrySet()) {
        logger.debug("next data map val = " + val);
    }
    EmailReportService emailReportService = (EmailReportService) dataMap.get("service");


    logger.debug("email report service = " + emailReportService);

ログでは、emailReportService が null として返されます。

4

1 に答える 1

3

JobDataMapトリガーで を保存しており、 から取得していますjobDetailJobExecutionContext.html#getMergedJobDataMap()を使用するか、 JobExecutionContext.html#getTrigger()JobDataMapから取得してみてください

于 2013-01-07T12:57:37.187 に答える