当从另一个类访问数据时,Quartz JobScheduler dataMap似乎正在丢失数据

时间:2013-01-07 12:26:41

标签: java quartz-scheduler jobs job-scheduling

我正在尝试使用石英作业调度程序自动发送电子邮件。为此,我使用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。

1 个答案:

答案 0 :(得分:2)

您正在将JobDataMap保存在触发器上,而您将从jobDetail获取。尝试使用JobExecutionContext.html#getMergedJobDataMap()或从JobExecutionContext.html#getTrigger()

获取JobDataMap